<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: pcl::IntegralImageNormalEstimation&lt; PointInT, PointOutT &gt; 模板类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classpcl_1_1_integral_image_normal_estimation.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-types">Public 类型</a> &#124;
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pro-methods">Protected 成员函数</a> &#124;
<a href="#pri-methods">Private 成员函数</a> &#124;
<a href="#pri-attribs">Private 属性</a> &#124;
<a href="classpcl_1_1_integral_image_normal_estimation-members.html">所有成员列表</a>  </div>
  <div class="headertitle">
<div class="title">pcl::IntegralImageNormalEstimation&lt; PointInT, PointOutT &gt; 模板类 参考</div>  </div>
</div><!--header-->
<div class="contents">

<p>Surface normal estimation on organized data using integral images.  
 <a href="classpcl_1_1_integral_image_normal_estimation.html#details">更多...</a></p>

<p><code>#include &lt;<a class="el" href="integral__image__normal_8h_source.html">integral_image_normal.h</a>&gt;</code></p>
<div class="dynheader">
类 pcl::IntegralImageNormalEstimation&lt; PointInT, PointOutT &gt; 继承关系图:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classpcl_1_1_integral_image_normal_estimation.png" usemap="#pcl::IntegralImageNormalEstimation_3C_20PointInT_2C_20PointOutT_20_3E_map" alt=""/>
  <map id="pcl::IntegralImageNormalEstimation_3C_20PointInT_2C_20PointOutT_20_3E_map" name="pcl::IntegralImageNormalEstimation_3C_20PointInT_2C_20PointOutT_20_3E_map">
<area href="classpcl_1_1_feature.html" title="Feature represents the base feature class. Some generic 3D operations that are applicable to all feat..." alt="pcl::Feature&lt; PointInT, PointOutT &gt;" shape="rect" coords="0,56,339,80"/>
<area href="classpcl_1_1_p_c_l_base.html" alt="pcl::PCLBase&lt; PointInT &gt;" shape="rect" coords="0,0,339,24"/>
  </map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public 类型</h2></td></tr>
<tr class="memitem:a10da239414888271aeb02972f7420780"><td class="memItemLeft" align="right" valign="top"><a id="a10da239414888271aeb02972f7420780"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a10da239414888271aeb02972f7420780">BorderPolicy</a> { <b>BORDER_POLICY_IGNORE</b>
, <b>BORDER_POLICY_MIRROR</b>
 }</td></tr>
<tr class="memdesc:a10da239414888271aeb02972f7420780"><td class="mdescLeft">&#160;</td><td class="mdescRight">Different types of border handling. <br /></td></tr>
<tr class="separator:a10da239414888271aeb02972f7420780"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1ad3ff9e39b97a8e4294b71ab13031ff"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a1ad3ff9e39b97a8e4294b71ab13031ff">NormalEstimationMethod</a> { <b>COVARIANCE_MATRIX</b>
, <b>AVERAGE_3D_GRADIENT</b>
, <b>AVERAGE_DEPTH_CHANGE</b>
, <b>SIMPLE_3D_GRADIENT</b>
 }</td></tr>
<tr class="memdesc:a1ad3ff9e39b97a8e4294b71ab13031ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Different normal estimation methods.  <a href="classpcl_1_1_integral_image_normal_estimation.html#a1ad3ff9e39b97a8e4294b71ab13031ff">更多...</a><br /></td></tr>
<tr class="separator:a1ad3ff9e39b97a8e4294b71ab13031ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a055e78c7dcbb56d6e7a84761c7df3f55"><td class="memItemLeft" align="right" valign="top"><a id="a055e78c7dcbb56d6e7a84761c7df3f55"></a>
typedef boost::shared_ptr&lt; <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Ptr</b></td></tr>
<tr class="separator:a055e78c7dcbb56d6e7a84761c7df3f55"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf120a4406a3e436805589c359c606c5"><td class="memItemLeft" align="right" valign="top"><a id="aaf120a4406a3e436805589c359c606c5"></a>
typedef boost::shared_ptr&lt; const <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>ConstPtr</b></td></tr>
<tr class="separator:aaf120a4406a3e436805589c359c606c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae9ca09e7cf1d82b45a318e4007f703c9"><td class="memItemLeft" align="right" valign="top"><a id="ae9ca09e7cf1d82b45a318e4007f703c9"></a>
typedef <a class="el" href="classpcl_1_1_feature.html">Feature</a>&lt; PointInT, PointOutT &gt;::<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudIn</a>&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudIn</b></td></tr>
<tr class="separator:ae9ca09e7cf1d82b45a318e4007f703c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ead7b32b4c0158b5fec749625a222b6"><td class="memItemLeft" align="right" valign="top"><a id="a6ead7b32b4c0158b5fec749625a222b6"></a>
typedef <a class="el" href="classpcl_1_1_feature.html">Feature</a>&lt; PointInT, PointOutT &gt;::<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a>&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudOut</b></td></tr>
<tr class="separator:a6ead7b32b4c0158b5fec749625a222b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classpcl_1_1_feature"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classpcl_1_1_feature')"><img src="closed.png" alt="-"/>&#160;Public 类型 继承自 <a class="el" href="classpcl_1_1_feature.html">pcl::Feature&lt; PointInT, PointOutT &gt;</a></td></tr>
<tr class="memitem:a3c8f042de904356bb5ff24d9ad107950 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a3c8f042de904356bb5ff24d9ad107950"></a>
typedef <a class="el" href="classpcl_1_1_p_c_l_base.html">PCLBase</a>&lt; PointInT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>BaseClass</b></td></tr>
<tr class="separator:a3c8f042de904356bb5ff24d9ad107950 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6c428fb881eb4e84bb0e2efda744ead0 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a6c428fb881eb4e84bb0e2efda744ead0"></a>
typedef boost::shared_ptr&lt; <a class="el" href="classpcl_1_1_feature.html">Feature</a>&lt; PointInT, PointOutT &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Ptr</b></td></tr>
<tr class="separator:a6c428fb881eb4e84bb0e2efda744ead0 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adcfd3b4628399e8a514fd3359f7dd058 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="adcfd3b4628399e8a514fd3359f7dd058"></a>
typedef boost::shared_ptr&lt; const <a class="el" href="classpcl_1_1_feature.html">Feature</a>&lt; PointInT, PointOutT &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>ConstPtr</b></td></tr>
<tr class="separator:adcfd3b4628399e8a514fd3359f7dd058 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a83dcd0fa354ad1ece6d73317db9b8bd6 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a83dcd0fa354ad1ece6d73317db9b8bd6"></a>
typedef <a class="el" href="classpcl_1_1search_1_1_search.html">pcl::search::Search</a>&lt; PointInT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>KdTree</b></td></tr>
<tr class="separator:a83dcd0fa354ad1ece6d73317db9b8bd6 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a29696730ac15a3c3e4a9de8e4b5a90c9 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a29696730ac15a3c3e4a9de8e4b5a90c9"></a>
typedef <a class="el" href="classpcl_1_1search_1_1_search.html">pcl::search::Search</a>&lt; PointInT &gt;::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>KdTreePtr</b></td></tr>
<tr class="separator:a29696730ac15a3c3e4a9de8e4b5a90c9 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0c115f612b715589fab0608cce875433 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a0c115f612b715589fab0608cce875433"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudIn</b></td></tr>
<tr class="separator:a0c115f612b715589fab0608cce875433 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af33a821de7f253b7f50b32b0dd7cdc4c inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="af33a821de7f253b7f50b32b0dd7cdc4c"></a>
typedef PointCloudIn::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudInPtr</b></td></tr>
<tr class="separator:af33a821de7f253b7f50b32b0dd7cdc4c inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8a51580ac161d5a4e221c4e364dbae4 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="ac8a51580ac161d5a4e221c4e364dbae4"></a>
typedef PointCloudIn::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudInConstPtr</b></td></tr>
<tr class="separator:ac8a51580ac161d5a4e221c4e364dbae4 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a52b2653f6f3b3cee1d0eb48e277db608 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a52b2653f6f3b3cee1d0eb48e277db608"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudOut</b></td></tr>
<tr class="separator:a52b2653f6f3b3cee1d0eb48e277db608 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1762cf28ac0703007348077dd843626f inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a1762cf28ac0703007348077dd843626f"></a>
typedef boost::function&lt; int(size_t, double, std::vector&lt; int &gt; &amp;, std::vector&lt; float &gt; &amp;)&gt;&#160;</td><td class="memItemRight" valign="bottom"><b>SearchMethod</b></td></tr>
<tr class="separator:a1762cf28ac0703007348077dd843626f inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a34f4d5bb61811e547d9523f6f355fab0 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a34f4d5bb61811e547d9523f6f355fab0"></a>
typedef boost::function&lt; int(const <a class="el" href="classpcl_1_1_point_cloud.html">PointCloudIn</a> &amp;cloud, size_t index, double, std::vector&lt; int &gt; &amp;, std::vector&lt; float &gt; &amp;)&gt;&#160;</td><td class="memItemRight" valign="bottom"><b>SearchMethodSurface</b></td></tr>
<tr class="separator:a34f4d5bb61811e547d9523f6f355fab0 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Public 类型 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:ae2f6f6863a73337858b7a7a054eaae4f inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ae2f6f6863a73337858b7a7a054eaae4f"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloud</b></td></tr>
<tr class="separator:ae2f6f6863a73337858b7a7a054eaae4f inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab84dd662cda89edb882fe5307b2136ea inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ab84dd662cda89edb882fe5307b2136ea"></a>
typedef PointCloud::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudPtr</b></td></tr>
<tr class="separator:ab84dd662cda89edb882fe5307b2136ea inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8326513fad0680b6993e2f1a79a6af4 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ac8326513fad0680b6993e2f1a79a6af4"></a>
typedef PointCloud::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudConstPtr</b></td></tr>
<tr class="separator:ac8326513fad0680b6993e2f1a79a6af4 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae51eae0c7b3e0b7178f4894dff90660a inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ae51eae0c7b3e0b7178f4894dff90660a"></a>
typedef boost::shared_ptr&lt; <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointIndicesPtr</b></td></tr>
<tr class="separator:ae51eae0c7b3e0b7178f4894dff90660a inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a51771056fb4ab8c448a11157acbe2ee0 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a51771056fb4ab8c448a11157acbe2ee0"></a>
typedef boost::shared_ptr&lt; <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> const &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointIndicesConstPtr</b></td></tr>
<tr class="separator:a51771056fb4ab8c448a11157acbe2ee0 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:a49efd58398769f580d7b177adaa23fbc"><td class="memItemLeft" align="right" valign="top"><a id="a49efd58398769f580d7b177adaa23fbc"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a49efd58398769f580d7b177adaa23fbc">IntegralImageNormalEstimation</a> ()</td></tr>
<tr class="memdesc:a49efd58398769f580d7b177adaa23fbc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor <br /></td></tr>
<tr class="separator:a49efd58398769f580d7b177adaa23fbc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a91460b2cb7e001192bee7df2450d3970"><td class="memItemLeft" align="right" valign="top"><a id="a91460b2cb7e001192bee7df2450d3970"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a91460b2cb7e001192bee7df2450d3970">~IntegralImageNormalEstimation</a> ()</td></tr>
<tr class="memdesc:a91460b2cb7e001192bee7df2450d3970"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor <br /></td></tr>
<tr class="separator:a91460b2cb7e001192bee7df2450d3970"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a51049e633396d653658a771a7be0bb9d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a51049e633396d653658a771a7be0bb9d">setRectSize</a> (const int width, const int height)</td></tr>
<tr class="memdesc:a51049e633396d653658a771a7be0bb9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the regions size which is considered for normal estimation.  <a href="classpcl_1_1_integral_image_normal_estimation.html#a51049e633396d653658a771a7be0bb9d">更多...</a><br /></td></tr>
<tr class="separator:a51049e633396d653658a771a7be0bb9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1e3a8c0f630638e63146d18690d69920"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a1e3a8c0f630638e63146d18690d69920">setBorderPolicy</a> (const <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a10da239414888271aeb02972f7420780">BorderPolicy</a> border_policy)</td></tr>
<tr class="memdesc:a1e3a8c0f630638e63146d18690d69920"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the policy for handling borders.  <a href="classpcl_1_1_integral_image_normal_estimation.html#a1e3a8c0f630638e63146d18690d69920">更多...</a><br /></td></tr>
<tr class="separator:a1e3a8c0f630638e63146d18690d69920"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd934a08c5d9bf148833a21e6892303a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#abd934a08c5d9bf148833a21e6892303a">computePointNormal</a> (const int pos_x, const int pos_y, const unsigned point_index, PointOutT &amp;normal)</td></tr>
<tr class="memdesc:abd934a08c5d9bf148833a21e6892303a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the normal at the specified position.  <a href="classpcl_1_1_integral_image_normal_estimation.html#abd934a08c5d9bf148833a21e6892303a">更多...</a><br /></td></tr>
<tr class="separator:abd934a08c5d9bf148833a21e6892303a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae4653eef47ea949d65d16178549aae1a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#ae4653eef47ea949d65d16178549aae1a">computePointNormalMirror</a> (const int pos_x, const int pos_y, const unsigned point_index, PointOutT &amp;normal)</td></tr>
<tr class="memdesc:ae4653eef47ea949d65d16178549aae1a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the normal at the specified position with mirroring for border handling.  <a href="classpcl_1_1_integral_image_normal_estimation.html#ae4653eef47ea949d65d16178549aae1a">更多...</a><br /></td></tr>
<tr class="separator:ae4653eef47ea949d65d16178549aae1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:accacab0813722377331fd6315a4d5d13"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#accacab0813722377331fd6315a4d5d13">setMaxDepthChangeFactor</a> (float max_depth_change_factor)</td></tr>
<tr class="memdesc:accacab0813722377331fd6315a4d5d13"><td class="mdescLeft">&#160;</td><td class="mdescRight">The depth change threshold for computing object borders  <a href="classpcl_1_1_integral_image_normal_estimation.html#accacab0813722377331fd6315a4d5d13">更多...</a><br /></td></tr>
<tr class="separator:accacab0813722377331fd6315a4d5d13"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac833637b98338bafa4c38925ab245927"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#ac833637b98338bafa4c38925ab245927">setNormalSmoothingSize</a> (float normal_smoothing_size)</td></tr>
<tr class="memdesc:ac833637b98338bafa4c38925ab245927"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the normal smoothing size  <a href="classpcl_1_1_integral_image_normal_estimation.html#ac833637b98338bafa4c38925ab245927">更多...</a><br /></td></tr>
<tr class="separator:ac833637b98338bafa4c38925ab245927"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6bde05e6637af21bb5f970c9feba4fc0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a6bde05e6637af21bb5f970c9feba4fc0">setNormalEstimationMethod</a> (<a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a1ad3ff9e39b97a8e4294b71ab13031ff">NormalEstimationMethod</a> normal_estimation_method)</td></tr>
<tr class="memdesc:a6bde05e6637af21bb5f970c9feba4fc0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the normal estimation method. The current implemented algorithms are:  <a href="classpcl_1_1_integral_image_normal_estimation.html#a6bde05e6637af21bb5f970c9feba4fc0">更多...</a><br /></td></tr>
<tr class="separator:a6bde05e6637af21bb5f970c9feba4fc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1da9e189ffb19ba89044a531242656fd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a1da9e189ffb19ba89044a531242656fd">setDepthDependentSmoothing</a> (bool use_depth_dependent_smoothing)</td></tr>
<tr class="memdesc:a1da9e189ffb19ba89044a531242656fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set whether to use depth depending smoothing or not  <a href="classpcl_1_1_integral_image_normal_estimation.html#a1da9e189ffb19ba89044a531242656fd">更多...</a><br /></td></tr>
<tr class="separator:a1da9e189ffb19ba89044a531242656fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a03cc1e146b6041a1d3d5a989ad171ee2"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a03cc1e146b6041a1d3d5a989ad171ee2">setInputCloud</a> (const typename PointCloudIn::ConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:a03cc1e146b6041a1d3d5a989ad171ee2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the input dataset (overwrites the <a class="el" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea" title="Provide a pointer to the input dataset">PCLBase::setInputCloud</a> method)  <a href="classpcl_1_1_integral_image_normal_estimation.html#a03cc1e146b6041a1d3d5a989ad171ee2">更多...</a><br /></td></tr>
<tr class="separator:a03cc1e146b6041a1d3d5a989ad171ee2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84ba79488f0068c287293f08a90c5720"><td class="memItemLeft" align="right" valign="top"><a id="a84ba79488f0068c287293f08a90c5720"></a>
float *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a84ba79488f0068c287293f08a90c5720">getDistanceMap</a> ()</td></tr>
<tr class="memdesc:a84ba79488f0068c287293f08a90c5720"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a pointer to the distance map which was computed internally <br /></td></tr>
<tr class="separator:a84ba79488f0068c287293f08a90c5720"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac5aa14562fc0cca24be8cc43860d896a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#ac5aa14562fc0cca24be8cc43860d896a">setViewPoint</a> (float vpx, float vpy, float vpz)</td></tr>
<tr class="memdesc:ac5aa14562fc0cca24be8cc43860d896a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the viewpoint.  <a href="classpcl_1_1_integral_image_normal_estimation.html#ac5aa14562fc0cca24be8cc43860d896a">更多...</a><br /></td></tr>
<tr class="separator:ac5aa14562fc0cca24be8cc43860d896a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6919297725dcf7a83ac4e6e4190a09d4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a6919297725dcf7a83ac4e6e4190a09d4">getViewPoint</a> (float &amp;vpx, float &amp;vpy, float &amp;vpz)</td></tr>
<tr class="memdesc:a6919297725dcf7a83ac4e6e4190a09d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the viewpoint.  <a href="classpcl_1_1_integral_image_normal_estimation.html#a6919297725dcf7a83ac4e6e4190a09d4">更多...</a><br /></td></tr>
<tr class="separator:a6919297725dcf7a83ac4e6e4190a09d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a50a6f56c4327ae316c825b3ba396b992"><td class="memItemLeft" align="right" valign="top"><a id="a50a6f56c4327ae316c825b3ba396b992"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a50a6f56c4327ae316c825b3ba396b992">useSensorOriginAsViewPoint</a> ()</td></tr>
<tr class="memdesc:a50a6f56c4327ae316c825b3ba396b992"><td class="mdescLeft">&#160;</td><td class="mdescRight">sets whether the sensor origin or a user given viewpoint should be used. After this method, the normal estimation method uses the sensor origin of the input cloud. to use a user defined view point, use the method setViewPoint <br /></td></tr>
<tr class="separator:a50a6f56c4327ae316c825b3ba396b992"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classpcl_1_1_feature"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classpcl_1_1_feature')"><img src="closed.png" alt="-"/>&#160;Public 成员函数 继承自 <a class="el" href="classpcl_1_1_feature.html">pcl::Feature&lt; PointInT, PointOutT &gt;</a></td></tr>
<tr class="memitem:a96497e27e1087c0b1e07c8ae84aea152 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a96497e27e1087c0b1e07c8ae84aea152"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a96497e27e1087c0b1e07c8ae84aea152">Feature</a> ()</td></tr>
<tr class="memdesc:a96497e27e1087c0b1e07c8ae84aea152 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty constructor. <br /></td></tr>
<tr class="separator:a96497e27e1087c0b1e07c8ae84aea152 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a147e6286fc98646910c4b6751278038f inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a147e6286fc98646910c4b6751278038f"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a147e6286fc98646910c4b6751278038f">~Feature</a> ()</td></tr>
<tr class="memdesc:a147e6286fc98646910c4b6751278038f inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty destructor <br /></td></tr>
<tr class="separator:a147e6286fc98646910c4b6751278038f inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14fbb05e0e8f1d1ec766a50353f3c224 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a14fbb05e0e8f1d1ec766a50353f3c224">setSearchSurface</a> (const PointCloudInConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:a14fbb05e0e8f1d1ec766a50353f3c224 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to a dataset to add additional information to estimate the features for every point in the input dataset. This is optional, if this is not set, it will only use the data in the input cloud to estimate the features. This is useful when you only need to compute the features for a downsampled cloud.  <a href="classpcl_1_1_feature.html#a14fbb05e0e8f1d1ec766a50353f3c224">更多...</a><br /></td></tr>
<tr class="separator:a14fbb05e0e8f1d1ec766a50353f3c224 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09320ff2025be07c1e4a378d88588e8d inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a09320ff2025be07c1e4a378d88588e8d"></a>
PointCloudInConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a09320ff2025be07c1e4a378d88588e8d">getSearchSurface</a> () const</td></tr>
<tr class="memdesc:a09320ff2025be07c1e4a378d88588e8d inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the surface point cloud dataset. <br /></td></tr>
<tr class="separator:a09320ff2025be07c1e4a378d88588e8d inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ace1caca622f06eee8ad1911228324792 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#ace1caca622f06eee8ad1911228324792">setSearchMethod</a> (const KdTreePtr &amp;tree)</td></tr>
<tr class="memdesc:ace1caca622f06eee8ad1911228324792 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the search object.  <a href="classpcl_1_1_feature.html#ace1caca622f06eee8ad1911228324792">更多...</a><br /></td></tr>
<tr class="separator:ace1caca622f06eee8ad1911228324792 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acc850056d252306c48c481e4bbee1821 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="acc850056d252306c48c481e4bbee1821"></a>
KdTreePtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#acc850056d252306c48c481e4bbee1821">getSearchMethod</a> () const</td></tr>
<tr class="memdesc:acc850056d252306c48c481e4bbee1821 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the search method used. <br /></td></tr>
<tr class="separator:acc850056d252306c48c481e4bbee1821 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86004b18e77cc0c38a1a33fbd43fb760 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a86004b18e77cc0c38a1a33fbd43fb760"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a86004b18e77cc0c38a1a33fbd43fb760">getSearchParameter</a> () const</td></tr>
<tr class="memdesc:a86004b18e77cc0c38a1a33fbd43fb760 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the internal search parameter. <br /></td></tr>
<tr class="separator:a86004b18e77cc0c38a1a33fbd43fb760 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a50129bc51cb240eca42df9963f7ac0c0 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a50129bc51cb240eca42df9963f7ac0c0">setKSearch</a> (int k)</td></tr>
<tr class="memdesc:a50129bc51cb240eca42df9963f7ac0c0 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the number of k nearest neighbors to use for the feature estimation.  <a href="classpcl_1_1_feature.html#a50129bc51cb240eca42df9963f7ac0c0">更多...</a><br /></td></tr>
<tr class="separator:a50129bc51cb240eca42df9963f7ac0c0 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a94cce071beee358359b14db2edcc62ae inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a94cce071beee358359b14db2edcc62ae"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a94cce071beee358359b14db2edcc62ae">getKSearch</a> () const</td></tr>
<tr class="memdesc:a94cce071beee358359b14db2edcc62ae inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">get the number of k nearest neighbors used for the feature estimation. <br /></td></tr>
<tr class="separator:a94cce071beee358359b14db2edcc62ae inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a44829319486a2dc415a4e068dc55c577 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a44829319486a2dc415a4e068dc55c577">setRadiusSearch</a> (double radius)</td></tr>
<tr class="memdesc:a44829319486a2dc415a4e068dc55c577 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the sphere radius that is to be used for determining the nearest neighbors used for the feature estimation.  <a href="classpcl_1_1_feature.html#a44829319486a2dc415a4e068dc55c577">更多...</a><br /></td></tr>
<tr class="separator:a44829319486a2dc415a4e068dc55c577 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac62f459672f3ca0e986e495a9220b268 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="ac62f459672f3ca0e986e495a9220b268"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#ac62f459672f3ca0e986e495a9220b268">getRadiusSearch</a> () const</td></tr>
<tr class="memdesc:ac62f459672f3ca0e986e495a9220b268 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the sphere radius used for determining the neighbors. <br /></td></tr>
<tr class="separator:ac62f459672f3ca0e986e495a9220b268 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5b1fa9612da40e738b1d99252c5ff2f inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#ad5b1fa9612da40e738b1d99252c5ff2f">compute</a> (<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a> &amp;output)</td></tr>
<tr class="memdesc:ad5b1fa9612da40e738b1d99252c5ff2f inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base method for feature estimation for all points given in &lt;setInputCloud (), setIndices ()&gt; using the surface in setSearchSurface () and the spatial locator in setSearchMethod ()  <a href="classpcl_1_1_feature.html#ad5b1fa9612da40e738b1d99252c5ff2f">更多...</a><br /></td></tr>
<tr class="separator:ad5b1fa9612da40e738b1d99252c5ff2f inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Public 成员函数 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="af4fbc5eb005057f8a0fc6d60bde595df"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af4fbc5eb005057f8a0fc6d60bde595df">PCLBase</a> ()</td></tr>
<tr class="memdesc:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty constructor. <br /></td></tr>
<tr class="separator:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a7a6dd7a91275d7737cf1b18005b47244"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a7a6dd7a91275d7737cf1b18005b47244">PCLBase</a> (const <a class="el" href="classpcl_1_1_p_c_l_base.html">PCLBase</a> &amp;base)</td></tr>
<tr class="memdesc:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor. <br /></td></tr>
<tr class="separator:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ad5d6846e98e59c37dcc3dc9958d53966"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ad5d6846e98e59c37dcc3dc9958d53966">~PCLBase</a> ()</td></tr>
<tr class="memdesc:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <br /></td></tr>
<tr class="separator:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1952d7101f3942bac3b69ed55c1ca7ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (const PointCloudConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:a1952d7101f3942bac3b69ed55c1ca7ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the input dataset  <a href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">更多...</a><br /></td></tr>
<tr class="separator:a1952d7101f3942bac3b69ed55c1ca7ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a8cd745c4f7a792212f4fc3720b9d46ea"></a>
PointCloudConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a8cd745c4f7a792212f4fc3720b9d46ea">getInputCloud</a> () const</td></tr>
<tr class="memdesc:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the input point cloud dataset. <br /></td></tr>
<tr class="separator:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">setIndices</a> (const IndicesPtr &amp;indices)</td></tr>
<tr class="memdesc:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">更多...</a><br /></td></tr>
<tr class="separator:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a436c68c74b31e4dd00000adfbb11ca7c">setIndices</a> (const IndicesConstPtr &amp;indices)</td></tr>
<tr class="memdesc:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#a436c68c74b31e4dd00000adfbb11ca7c">更多...</a><br /></td></tr>
<tr class="separator:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af9cc90d8364ce968566f75800d3773ca">setIndices</a> (const PointIndicesConstPtr &amp;indices)</td></tr>
<tr class="memdesc:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#af9cc90d8364ce968566f75800d3773ca">更多...</a><br /></td></tr>
<tr class="separator:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a930c7a6375fdf65ff8cfdb4eb4a6d996">setIndices</a> (size_t row_start, size_t col_start, size_t nb_rows, size_t nb_cols)</td></tr>
<tr class="memdesc:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the indices for the points laying within an interest region of the point cloud.  <a href="classpcl_1_1_p_c_l_base.html#a930c7a6375fdf65ff8cfdb4eb4a6d996">更多...</a><br /></td></tr>
<tr class="separator:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a058753dd4de73d3d0062fe2e452fba3c"></a>
IndicesPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a058753dd4de73d3d0062fe2e452fba3c">getIndices</a> ()</td></tr>
<tr class="memdesc:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the vector of indices used. <br /></td></tr>
<tr class="separator:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="acae187b37230758959572ceb1e6e2045"></a>
IndicesConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#acae187b37230758959572ceb1e6e2045">getIndices</a> () const</td></tr>
<tr class="memdesc:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the vector of indices used. <br /></td></tr>
<tr class="separator:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">const PointInT &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af7335fedb0af0930b9d1dedcb54ba201">operator[]</a> (size_t pos) const</td></tr>
<tr class="memdesc:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Override PointCloud operator[] to shorten code  <a href="classpcl_1_1_p_c_l_base.html#af7335fedb0af0930b9d1dedcb54ba201">更多...</a><br /></td></tr>
<tr class="separator:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected 成员函数</h2></td></tr>
<tr class="memitem:af72a8687d1eae7bb34ee730ea3f7b5a8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#af72a8687d1eae7bb34ee730ea3f7b5a8">computeFeature</a> (<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a> &amp;output)</td></tr>
<tr class="memdesc:af72a8687d1eae7bb34ee730ea3f7b5a8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the normal for the complete cloud or only <em>indices_</em> if provided.  <a href="classpcl_1_1_integral_image_normal_estimation.html#af72a8687d1eae7bb34ee730ea3f7b5a8">更多...</a><br /></td></tr>
<tr class="separator:af72a8687d1eae7bb34ee730ea3f7b5a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab710003086195c2724920eae92538e48"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#ab710003086195c2724920eae92538e48">computeFeatureFull</a> (const float *distance_map, const float &amp;bad_point, <a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a> &amp;output)</td></tr>
<tr class="memdesc:ab710003086195c2724920eae92538e48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the normal for the complete cloud.  <a href="classpcl_1_1_integral_image_normal_estimation.html#ab710003086195c2724920eae92538e48">更多...</a><br /></td></tr>
<tr class="separator:ab710003086195c2724920eae92538e48"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac19f02fb42b8330569161f23adf03994"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#ac19f02fb42b8330569161f23adf03994">computeFeaturePart</a> (const float *distance_map, const float &amp;bad_point, <a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a> &amp;output)</td></tr>
<tr class="memdesc:ac19f02fb42b8330569161f23adf03994"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the normal for part of the cloud specified by <em>indices_</em>  <a href="classpcl_1_1_integral_image_normal_estimation.html#ac19f02fb42b8330569161f23adf03994">更多...</a><br /></td></tr>
<tr class="separator:ac19f02fb42b8330569161f23adf03994"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a214361c92cfa4fb307f973638b71663c"><td class="memItemLeft" align="right" valign="top"><a id="a214361c92cfa4fb307f973638b71663c"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a214361c92cfa4fb307f973638b71663c">initData</a> ()</td></tr>
<tr class="memdesc:a214361c92cfa4fb307f973638b71663c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize the data structures, based on the normal estimation method chosen. <br /></td></tr>
<tr class="separator:a214361c92cfa4fb307f973638b71663c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classpcl_1_1_feature"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classpcl_1_1_feature')"><img src="closed.png" alt="-"/>&#160;Protected 成员函数 继承自 <a class="el" href="classpcl_1_1_feature.html">pcl::Feature&lt; PointInT, PointOutT &gt;</a></td></tr>
<tr class="memitem:ae6b4d5717999b6267a670dc704146fdc inherit pro_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="ae6b4d5717999b6267a670dc704146fdc"></a>
const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#ae6b4d5717999b6267a670dc704146fdc">getClassName</a> () const</td></tr>
<tr class="memdesc:ae6b4d5717999b6267a670dc704146fdc inherit pro_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a string representation of the name of this class. <br /></td></tr>
<tr class="separator:ae6b4d5717999b6267a670dc704146fdc inherit pro_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab235b6b76033922b19aae91714d7e413 inherit pro_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="ab235b6b76033922b19aae91714d7e413"></a>
virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#ab235b6b76033922b19aae91714d7e413">deinitCompute</a> ()</td></tr>
<tr class="memdesc:ab235b6b76033922b19aae91714d7e413 inherit pro_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method should get called after ending the actual computation. <br /></td></tr>
<tr class="separator:ab235b6b76033922b19aae91714d7e413 inherit pro_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa7d2ff6f0db4d63a74a3e01ad2b1f9ab inherit pro_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#aa7d2ff6f0db4d63a74a3e01ad2b1f9ab">searchForNeighbors</a> (size_t index, double parameter, std::vector&lt; int &gt; &amp;indices, std::vector&lt; float &gt; &amp;distances) const</td></tr>
<tr class="memdesc:aa7d2ff6f0db4d63a74a3e01ad2b1f9ab inherit pro_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Search for k-nearest neighbors using the spatial locator from <em>setSearchmethod</em>, and the given surface from <em>setSearchSurface</em>.  <a href="classpcl_1_1_feature.html#aa7d2ff6f0db4d63a74a3e01ad2b1f9ab">更多...</a><br /></td></tr>
<tr class="separator:aa7d2ff6f0db4d63a74a3e01ad2b1f9ab inherit pro_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9422bdfb7074f73019e32d55eeda73bb inherit pro_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a9422bdfb7074f73019e32d55eeda73bb">searchForNeighbors</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">PointCloudIn</a> &amp;cloud, size_t index, double parameter, std::vector&lt; int &gt; &amp;indices, std::vector&lt; float &gt; &amp;distances) const</td></tr>
<tr class="memdesc:a9422bdfb7074f73019e32d55eeda73bb inherit pro_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Search for k-nearest neighbors using the spatial locator from <em>setSearchmethod</em>, and the given surface from <em>setSearchSurface</em>.  <a href="classpcl_1_1_feature.html#a9422bdfb7074f73019e32d55eeda73bb">更多...</a><br /></td></tr>
<tr class="separator:a9422bdfb7074f73019e32d55eeda73bb inherit pro_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Protected 成员函数 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#acceb20854934f4cf77e266eb5a44d4f0">initCompute</a> ()</td></tr>
<tr class="memdesc:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method should get called before starting the actual computation.  <a href="classpcl_1_1_p_c_l_base.html#acceb20854934f4cf77e266eb5a44d4f0">更多...</a><br /></td></tr>
<tr class="separator:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="afc426c4eebb94b7734d4fa556bff1420"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#afc426c4eebb94b7734d4fa556bff1420">deinitCompute</a> ()</td></tr>
<tr class="memdesc:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method should get called after finishing the actual computation. <br /></td></tr>
<tr class="separator:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private 成员函数</h2></td></tr>
<tr class="memitem:a52a687473809f48f6a6ba4238767cb63"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a52a687473809f48f6a6ba4238767cb63">flipNormalTowardsViewpoint</a> (const PointInT &amp;point, float vp_x, float vp_y, float vp_z, float &amp;nx, float &amp;ny, float &amp;nz)</td></tr>
<tr class="memdesc:a52a687473809f48f6a6ba4238767cb63"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flip (in place) the estimated normal of a point towards a given viewpoint  <a href="classpcl_1_1_integral_image_normal_estimation.html#a52a687473809f48f6a6ba4238767cb63">更多...</a><br /></td></tr>
<tr class="separator:a52a687473809f48f6a6ba4238767cb63"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a499e7003cebffe7cf7504f0397abb3a5"><td class="memItemLeft" align="right" valign="top"><a id="a499e7003cebffe7cf7504f0397abb3a5"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a499e7003cebffe7cf7504f0397abb3a5">initCompute</a> ()</td></tr>
<tr class="memdesc:a499e7003cebffe7cf7504f0397abb3a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method should get called before starting the actual computation. <br /></td></tr>
<tr class="separator:a499e7003cebffe7cf7504f0397abb3a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a168c03eb1553206db701656fdb0a69ba"><td class="memItemLeft" align="right" valign="top"><a id="a168c03eb1553206db701656fdb0a69ba"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a168c03eb1553206db701656fdb0a69ba">initCovarianceMatrixMethod</a> ()</td></tr>
<tr class="memdesc:a168c03eb1553206db701656fdb0a69ba"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal initialization method for COVARIANCE_MATRIX estimation. <br /></td></tr>
<tr class="separator:a168c03eb1553206db701656fdb0a69ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aea7b9064b3ccab7deb396ec16ada6200"><td class="memItemLeft" align="right" valign="top"><a id="aea7b9064b3ccab7deb396ec16ada6200"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#aea7b9064b3ccab7deb396ec16ada6200">initAverage3DGradientMethod</a> ()</td></tr>
<tr class="memdesc:aea7b9064b3ccab7deb396ec16ada6200"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal initialization method for AVERAGE_3D_GRADIENT estimation. <br /></td></tr>
<tr class="separator:aea7b9064b3ccab7deb396ec16ada6200"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adab913e619caca17ebaf950f07a7dc5b"><td class="memItemLeft" align="right" valign="top"><a id="adab913e619caca17ebaf950f07a7dc5b"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#adab913e619caca17ebaf950f07a7dc5b">initAverageDepthChangeMethod</a> ()</td></tr>
<tr class="memdesc:adab913e619caca17ebaf950f07a7dc5b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal initialization method for AVERAGE_DEPTH_CHANGE estimation. <br /></td></tr>
<tr class="separator:adab913e619caca17ebaf950f07a7dc5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6f9aab3bed5a81f6d81bbf5495e7514f"><td class="memItemLeft" align="right" valign="top"><a id="a6f9aab3bed5a81f6d81bbf5495e7514f"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a6f9aab3bed5a81f6d81bbf5495e7514f">initSimple3DGradientMethod</a> ()</td></tr>
<tr class="memdesc:a6f9aab3bed5a81f6d81bbf5495e7514f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal initialization method for SIMPLE_3D_GRADIENT estimation. <br /></td></tr>
<tr class="separator:a6f9aab3bed5a81f6d81bbf5495e7514f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private 属性</h2></td></tr>
<tr class="memitem:a1837784fa20205739013c9df638468f5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a1ad3ff9e39b97a8e4294b71ab13031ff">NormalEstimationMethod</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a1837784fa20205739013c9df638468f5">normal_estimation_method_</a></td></tr>
<tr class="memdesc:a1837784fa20205739013c9df638468f5"><td class="mdescLeft">&#160;</td><td class="mdescRight">The normal estimation method to use. Currently, 3 implementations are provided:  <a href="classpcl_1_1_integral_image_normal_estimation.html#a1837784fa20205739013c9df638468f5">更多...</a><br /></td></tr>
<tr class="separator:a1837784fa20205739013c9df638468f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2fd09580d6e2e617c605b294aba5043d"><td class="memItemLeft" align="right" valign="top"><a id="a2fd09580d6e2e617c605b294aba5043d"></a>
<a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a10da239414888271aeb02972f7420780">BorderPolicy</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a2fd09580d6e2e617c605b294aba5043d">border_policy_</a></td></tr>
<tr class="memdesc:a2fd09580d6e2e617c605b294aba5043d"><td class="mdescLeft">&#160;</td><td class="mdescRight">The policy for handling borders. <br /></td></tr>
<tr class="separator:a2fd09580d6e2e617c605b294aba5043d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae61a7763129eaec087768796ee431cc3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#ae61a7763129eaec087768796ee431cc3">rect_width_</a></td></tr>
<tr class="separator:ae61a7763129eaec087768796ee431cc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adc5be36decd766deadabcc5cf3bbd943"><td class="memItemLeft" align="right" valign="top"><a id="adc5be36decd766deadabcc5cf3bbd943"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>rect_width_2_</b></td></tr>
<tr class="separator:adc5be36decd766deadabcc5cf3bbd943"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acdca56f703e8e5b20c868e96d18847ca"><td class="memItemLeft" align="right" valign="top"><a id="acdca56f703e8e5b20c868e96d18847ca"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>rect_width_4_</b></td></tr>
<tr class="separator:acdca56f703e8e5b20c868e96d18847ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9fddd3a5350251f9a2c8ccbc16a35cd5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a9fddd3a5350251f9a2c8ccbc16a35cd5">rect_height_</a></td></tr>
<tr class="separator:a9fddd3a5350251f9a2c8ccbc16a35cd5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a134a4aacea9cc30cdd8ce8cd06c05cb1"><td class="memItemLeft" align="right" valign="top"><a id="a134a4aacea9cc30cdd8ce8cd06c05cb1"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>rect_height_2_</b></td></tr>
<tr class="separator:a134a4aacea9cc30cdd8ce8cd06c05cb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5e3de3356d7fbb57503c620bf0b89c0"><td class="memItemLeft" align="right" valign="top"><a id="ad5e3de3356d7fbb57503c620bf0b89c0"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>rect_height_4_</b></td></tr>
<tr class="separator:ad5e3de3356d7fbb57503c620bf0b89c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a55d0c3687eefeefc28b8348d85bbb1d7"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a55d0c3687eefeefc28b8348d85bbb1d7">distance_threshold_</a></td></tr>
<tr class="separator:a55d0c3687eefeefc28b8348d85bbb1d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af125b60aeeef1334a25d24e5c2756d87"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classpcl_1_1_integral_image2_d.html">IntegralImage2D</a>&lt; float, 3 &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#af125b60aeeef1334a25d24e5c2756d87">integral_image_DX_</a></td></tr>
<tr class="separator:af125b60aeeef1334a25d24e5c2756d87"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a33e102529db567625037f7e15bb9bb4d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classpcl_1_1_integral_image2_d.html">IntegralImage2D</a>&lt; float, 3 &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a33e102529db567625037f7e15bb9bb4d">integral_image_DY_</a></td></tr>
<tr class="separator:a33e102529db567625037f7e15bb9bb4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6d6deebd64e2fab423a97ef61387e94a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classpcl_1_1_integral_image2_d.html">IntegralImage2D</a>&lt; float, 1 &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a></td></tr>
<tr class="separator:a6d6deebd64e2fab423a97ef61387e94a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a903b437af66404b7f634f69a45a493ec"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classpcl_1_1_integral_image2_d.html">IntegralImage2D</a>&lt; float, 3 &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a903b437af66404b7f634f69a45a493ec">integral_image_XYZ_</a></td></tr>
<tr class="separator:a903b437af66404b7f634f69a45a493ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0c80b5461d38e8d9455f4aa5ad1a8a83"><td class="memItemLeft" align="right" valign="top">float *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a0c80b5461d38e8d9455f4aa5ad1a8a83">diff_x_</a></td></tr>
<tr class="separator:a0c80b5461d38e8d9455f4aa5ad1a8a83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afe1b1e088f89b386279ad3581fe9b642"><td class="memItemLeft" align="right" valign="top">float *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#afe1b1e088f89b386279ad3581fe9b642">diff_y_</a></td></tr>
<tr class="separator:afe1b1e088f89b386279ad3581fe9b642"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4803e2c88084b1008c236868f8d53864"><td class="memItemLeft" align="right" valign="top">float *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a4803e2c88084b1008c236868f8d53864">depth_data_</a></td></tr>
<tr class="separator:a4803e2c88084b1008c236868f8d53864"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a25d9fff5422e0c591e78f04c4e9ca17c"><td class="memItemLeft" align="right" valign="top">float *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a25d9fff5422e0c591e78f04c4e9ca17c">distance_map_</a></td></tr>
<tr class="separator:a25d9fff5422e0c591e78f04c4e9ca17c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a66bbb5f2f74a9f8ccfaba482037cae47"><td class="memItemLeft" align="right" valign="top"><a id="a66bbb5f2f74a9f8ccfaba482037cae47"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a66bbb5f2f74a9f8ccfaba482037cae47">use_depth_dependent_smoothing_</a></td></tr>
<tr class="memdesc:a66bbb5f2f74a9f8ccfaba482037cae47"><td class="mdescLeft">&#160;</td><td class="mdescRight">Smooth data based on depth (true/false). <br /></td></tr>
<tr class="separator:a66bbb5f2f74a9f8ccfaba482037cae47"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abefcbb0a1e92132dd87ccda6d55ccb69"><td class="memItemLeft" align="right" valign="top"><a id="abefcbb0a1e92132dd87ccda6d55ccb69"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#abefcbb0a1e92132dd87ccda6d55ccb69">max_depth_change_factor_</a></td></tr>
<tr class="memdesc:abefcbb0a1e92132dd87ccda6d55ccb69"><td class="mdescLeft">&#160;</td><td class="mdescRight">Threshold for detecting depth discontinuities <br /></td></tr>
<tr class="separator:abefcbb0a1e92132dd87ccda6d55ccb69"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09d21b35bb777192f6716b611c70abae"><td class="memItemLeft" align="right" valign="top"><a id="a09d21b35bb777192f6716b611c70abae"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><b>normal_smoothing_size_</b></td></tr>
<tr class="separator:a09d21b35bb777192f6716b611c70abae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84d1ed7c0ff6e1cc87ce8a36083130e8"><td class="memItemLeft" align="right" valign="top"><a id="a84d1ed7c0ff6e1cc87ce8a36083130e8"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a84d1ed7c0ff6e1cc87ce8a36083130e8">init_covariance_matrix_</a></td></tr>
<tr class="memdesc:a84d1ed7c0ff6e1cc87ce8a36083130e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">True when a dataset has been received and the covariance_matrix data has been initialized. <br /></td></tr>
<tr class="separator:a84d1ed7c0ff6e1cc87ce8a36083130e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adf25d44bad467ec0e351426f80d1b4d0"><td class="memItemLeft" align="right" valign="top"><a id="adf25d44bad467ec0e351426f80d1b4d0"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#adf25d44bad467ec0e351426f80d1b4d0">init_average_3d_gradient_</a></td></tr>
<tr class="memdesc:adf25d44bad467ec0e351426f80d1b4d0"><td class="mdescLeft">&#160;</td><td class="mdescRight">True when a dataset has been received and the average 3d gradient data has been initialized. <br /></td></tr>
<tr class="separator:adf25d44bad467ec0e351426f80d1b4d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a262f078f6cbd2b7d3bcd579b7980f887"><td class="memItemLeft" align="right" valign="top"><a id="a262f078f6cbd2b7d3bcd579b7980f887"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a262f078f6cbd2b7d3bcd579b7980f887">init_simple_3d_gradient_</a></td></tr>
<tr class="memdesc:a262f078f6cbd2b7d3bcd579b7980f887"><td class="mdescLeft">&#160;</td><td class="mdescRight">True when a dataset has been received and the simple 3d gradient data has been initialized. <br /></td></tr>
<tr class="separator:a262f078f6cbd2b7d3bcd579b7980f887"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5680182b5bb43369faf0f9dcff1d07a2"><td class="memItemLeft" align="right" valign="top"><a id="a5680182b5bb43369faf0f9dcff1d07a2"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a5680182b5bb43369faf0f9dcff1d07a2">init_depth_change_</a></td></tr>
<tr class="memdesc:a5680182b5bb43369faf0f9dcff1d07a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">True when a dataset has been received and the depth change data has been initialized. <br /></td></tr>
<tr class="separator:a5680182b5bb43369faf0f9dcff1d07a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40c07d1b44f4107d695842fcff3a87ce"><td class="memItemLeft" align="right" valign="top"><a id="a40c07d1b44f4107d695842fcff3a87ce"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a40c07d1b44f4107d695842fcff3a87ce">vpx_</a></td></tr>
<tr class="memdesc:a40c07d1b44f4107d695842fcff3a87ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Values describing the viewpoint ("pinhole" camera model assumed). For per point viewpoints, inherit from <a class="el" href="classpcl_1_1_normal_estimation.html" title="NormalEstimation estimates local surface properties (surface normals and curvatures)at each 3D point....">NormalEstimation</a> and provide your own computeFeature (). By default, the viewpoint is set to 0,0,0. <br /></td></tr>
<tr class="separator:a40c07d1b44f4107d695842fcff3a87ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a329f05321667fd7618650b6b72ae489c"><td class="memItemLeft" align="right" valign="top"><a id="a329f05321667fd7618650b6b72ae489c"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><b>vpy_</b></td></tr>
<tr class="separator:a329f05321667fd7618650b6b72ae489c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8279b15795b712396f220567e88b7e0a"><td class="memItemLeft" align="right" valign="top"><a id="a8279b15795b712396f220567e88b7e0a"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><b>vpz_</b></td></tr>
<tr class="separator:a8279b15795b712396f220567e88b7e0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a01207a15920b58b89d97f7c650bfdf22"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a01207a15920b58b89d97f7c650bfdf22">use_sensor_origin_</a></td></tr>
<tr class="separator:a01207a15920b58b89d97f7c650bfdf22"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
额外继承的成员函数</h2></td></tr>
<tr class="inherit_header pro_attribs_classpcl_1_1_feature"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classpcl_1_1_feature')"><img src="closed.png" alt="-"/>&#160;Protected 属性 继承自 <a class="el" href="classpcl_1_1_feature.html">pcl::Feature&lt; PointInT, PointOutT &gt;</a></td></tr>
<tr class="memitem:a54032b79551164878ff59ed93b5c1dc5 inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a54032b79551164878ff59ed93b5c1dc5"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a54032b79551164878ff59ed93b5c1dc5">feature_name_</a></td></tr>
<tr class="memdesc:a54032b79551164878ff59ed93b5c1dc5 inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">The feature name. <br /></td></tr>
<tr class="separator:a54032b79551164878ff59ed93b5c1dc5 inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af2d27cdd139bd79335008303cf68ba82 inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="af2d27cdd139bd79335008303cf68ba82"></a>
SearchMethodSurface&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#af2d27cdd139bd79335008303cf68ba82">search_method_surface_</a></td></tr>
<tr class="memdesc:af2d27cdd139bd79335008303cf68ba82 inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">The search method template for points. <br /></td></tr>
<tr class="separator:af2d27cdd139bd79335008303cf68ba82 inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a98f8c497ac78cf49d9274c3ab5fe52df inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a98f8c497ac78cf49d9274c3ab5fe52df"></a>
PointCloudInConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a98f8c497ac78cf49d9274c3ab5fe52df">surface_</a></td></tr>
<tr class="memdesc:a98f8c497ac78cf49d9274c3ab5fe52df inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">An input point cloud describing the surface that is to be used for nearest neighbors estimation. <br /></td></tr>
<tr class="separator:a98f8c497ac78cf49d9274c3ab5fe52df inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7ce882e12198b2b2373cc31ba27b0ef1 inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a7ce882e12198b2b2373cc31ba27b0ef1"></a>
KdTreePtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a7ce882e12198b2b2373cc31ba27b0ef1">tree_</a></td></tr>
<tr class="memdesc:a7ce882e12198b2b2373cc31ba27b0ef1 inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the spatial search object. <br /></td></tr>
<tr class="separator:a7ce882e12198b2b2373cc31ba27b0ef1 inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0d21af8f0a11aa224026f6bb8e3060e7 inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a0d21af8f0a11aa224026f6bb8e3060e7"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a0d21af8f0a11aa224026f6bb8e3060e7">search_parameter_</a></td></tr>
<tr class="memdesc:a0d21af8f0a11aa224026f6bb8e3060e7 inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">The actual search parameter (from either <em>search_radius_</em> or <em>k_</em>). <br /></td></tr>
<tr class="separator:a0d21af8f0a11aa224026f6bb8e3060e7 inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2c52e9b0412b8ce790837b24cd99f0af inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a2c52e9b0412b8ce790837b24cd99f0af"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a2c52e9b0412b8ce790837b24cd99f0af">search_radius_</a></td></tr>
<tr class="memdesc:a2c52e9b0412b8ce790837b24cd99f0af inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">The nearest neighbors search radius for each point. <br /></td></tr>
<tr class="separator:a2c52e9b0412b8ce790837b24cd99f0af inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f68793061ef0973bdacfea56cf5ae21 inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a3f68793061ef0973bdacfea56cf5ae21"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a3f68793061ef0973bdacfea56cf5ae21">k_</a></td></tr>
<tr class="memdesc:a3f68793061ef0973bdacfea56cf5ae21 inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of K nearest neighbors to use for each point. <br /></td></tr>
<tr class="separator:a3f68793061ef0973bdacfea56cf5ae21 inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa08fc132189062dabfa291701fa46440 inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="aa08fc132189062dabfa291701fa46440"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#aa08fc132189062dabfa291701fa46440">fake_surface_</a></td></tr>
<tr class="memdesc:aa08fc132189062dabfa291701fa46440 inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">If no surface is given, we use the input <a class="el" href="classpcl_1_1_point_cloud.html" title="PointCloud represents the base class in PCL for storing collections of 3D points.">PointCloud</a> as the surface. <br /></td></tr>
<tr class="separator:aa08fc132189062dabfa291701fa46440 inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Protected 属性 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a09c70d8e06e3fb4f07903fe6f8d67869"></a>
PointCloudConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a></td></tr>
<tr class="memdesc:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">The input point cloud dataset. <br /></td></tr>
<tr class="separator:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="aaee847c8a517ebf365bad2cb182a6626"></a>
IndicesPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">indices_</a></td></tr>
<tr class="memdesc:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the vector of point indices to use. <br /></td></tr>
<tr class="separator:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ada1eadb824d34ca9206a86343d9760bb"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ada1eadb824d34ca9206a86343d9760bb">use_indices_</a></td></tr>
<tr class="memdesc:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set to true if point indices are used. <br /></td></tr>
<tr class="separator:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="adadb0299f144528020ed558af6879662"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#adadb0299f144528020ed558af6879662">fake_indices_</a></td></tr>
<tr class="memdesc:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">If no set of indices are given, we construct a set of fake indices that mimic the input PointCloud. <br /></td></tr>
<tr class="separator:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><h3>template&lt;typename PointInT, typename PointOutT&gt;<br />
class pcl::IntegralImageNormalEstimation&lt; PointInT, PointOutT &gt;</h3>

<p>Surface normal estimation on organized data using integral images. </p>
<pre class="fragment">   For detailed information about this method see:

   S. Holzer and R. B. Rusu and M. Dixon and S. Gedikli and N. Navab, 
   Adaptive Neighborhood Selection for Real-Time Surface Normal Estimation 
   from Organized Point Cloud Data Using Integral Images, IROS 2012.

   D. Holz, S. Holzer, R. B. Rusu, and S. Behnke (2011, July). 
   Real-Time Plane Segmentation using RGB-D Cameras. In Proceedings of 
   the 15th RoboCup International Symposium, Istanbul, Turkey.
   http://www.ais.uni-bonn.de/~holz/papers/holz_2011_robocup.pdf 
</pre> <dl class="section author"><dt>作者</dt><dd>Stefan Holzer </dd></dl>
</div><h2 class="groupheader">成员枚举类型说明</h2>
<a id="a1ad3ff9e39b97a8e4294b71ab13031ff"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1ad3ff9e39b97a8e4294b71ab13031ff">&#9670;&nbsp;</a></span>NormalEstimationMethod</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a1ad3ff9e39b97a8e4294b71ab13031ff">pcl::IntegralImageNormalEstimation::NormalEstimationMethod</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Different normal estimation methods. </p>
<ul>
<li>
<b>COVARIANCE_MATRIX</b> - creates 9 integral images to compute the normal for a specific point from the covariance matrix of its local neighborhood. </li>
<li>
<b>AVERAGE_3D_GRADIENT</b> - creates 6 integral images to compute smoothed versions of horizontal and vertical 3D gradients and computes the normals using the cross-product between these two gradients. </li>
<li>
<b>AVERAGE_DEPTH_CHANGE</b> - creates only a single integral image and computes the normals from the average depth changes. </li>
</ul>
<div class="fragment"><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;      {</div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;        COVARIANCE_MATRIX,</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;        AVERAGE_3D_GRADIENT,</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;        AVERAGE_DEPTH_CHANGE,</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;        SIMPLE_3D_GRADIENT</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">成员函数说明</h2>
<a id="af72a8687d1eae7bb34ee730ea3f7b5a8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af72a8687d1eae7bb34ee730ea3f7b5a8">&#9670;&nbsp;</a></span>computeFeature()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::computeFeature </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a> &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Computes the normal for the complete cloud or only <em>indices_</em> if provided. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>the resultant normals </td></tr>
  </table>
  </dd>
</dl>

<p>实现了 <a class="el" href="classpcl_1_1_feature.html#ace6344a05ab920294e725ef503cac0c0">pcl::Feature&lt; PointInT, PointOutT &gt;</a>.</p>
<div class="fragment"><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;{</div>
<div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;  output.sensor_origin_ = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;sensor_origin_;</div>
<div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;  output.sensor_orientation_ = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;sensor_orientation_;</div>
<div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;  </div>
<div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;  <span class="keywordtype">float</span> bad_point = std::numeric_limits&lt;float&gt;::quiet_NaN ();</div>
<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160; </div>
<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;  <span class="comment">// compute depth-change map</span></div>
<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> * depthChangeMap = <span class="keyword">new</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>[<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points.size ()];</div>
<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;  memset (depthChangeMap, 255, <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points.size ());</div>
<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160; </div>
<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;  <span class="keywordtype">unsigned</span> index = 0;</div>
<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ri = 0; ri &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;height-1; ++ri)</div>
<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;  {</div>
<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ci = 0; ci &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width-1; ++ci, ++index)</div>
<div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;    {</div>
<div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;      index = ri * <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width + ci;</div>
<div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160; </div>
<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> depth  = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points [index].z;</div>
<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> depthR = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points [index + 1].z;</div>
<div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> depthD = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points [index + <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width].z;</div>
<div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160; </div>
<div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;      <span class="comment">//const float depthDependendDepthChange = (max_depth_change_factor_ * (fabs(depth)+1.0f))/(500.0f*0.001f);</span></div>
<div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> depthDependendDepthChange = (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#abefcbb0a1e92132dd87ccda6d55ccb69">max_depth_change_factor_</a> * (fabsf (depth) + 1.0f) * 2.0f);</div>
<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160; </div>
<div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;      <span class="keywordflow">if</span> (fabs (depth - depthR) &gt; depthDependendDepthChange</div>
<div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;        || !pcl_isfinite (depth) || !pcl_isfinite (depthR))</div>
<div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;      {</div>
<div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;        depthChangeMap[index] = 0;</div>
<div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;        depthChangeMap[index+1] = 0;</div>
<div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;      }</div>
<div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;      <span class="keywordflow">if</span> (fabs (depth - depthD) &gt; depthDependendDepthChange</div>
<div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;        || !pcl_isfinite (depth) || !pcl_isfinite (depthD))</div>
<div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;      {</div>
<div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;        depthChangeMap[index] = 0;</div>
<div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;        depthChangeMap[index + <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width] = 0;</div>
<div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;      }</div>
<div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;    }</div>
<div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;  }</div>
<div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160; </div>
<div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;  <span class="comment">// compute distance map</span></div>
<div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;  <span class="comment">//float *distanceMap = new float[input_-&gt;points.size ()];</span></div>
<div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a25d9fff5422e0c591e78f04c4e9ca17c">distance_map_</a> != NULL) <span class="keyword">delete</span>[] <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a25d9fff5422e0c591e78f04c4e9ca17c">distance_map_</a>;</div>
<div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;  <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a25d9fff5422e0c591e78f04c4e9ca17c">distance_map_</a> = <span class="keyword">new</span> <span class="keywordtype">float</span>[<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points.size ()];</div>
<div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;  <span class="keywordtype">float</span> *distanceMap = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a25d9fff5422e0c591e78f04c4e9ca17c">distance_map_</a>;</div>
<div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> index = 0; index &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points.size (); ++index)</div>
<div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;  {</div>
<div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;    <span class="keywordflow">if</span> (depthChangeMap[index] == 0)</div>
<div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;      distanceMap[index] = 0.0f;</div>
<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;      distanceMap[index] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width + <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;height);</div>
<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;  }</div>
<div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160; </div>
<div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;  <span class="comment">// first pass</span></div>
<div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;  <span class="keywordtype">float</span>* previous_row = distanceMap;</div>
<div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;  <span class="keywordtype">float</span>* current_row = previous_row + <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width;</div>
<div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ri = 1; ri &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;height; ++ri)</div>
<div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;  {</div>
<div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ci = 1; ci &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width; ++ci)</div>
<div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;    {</div>
<div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> upLeft  = previous_row [ci - 1] + 1.4f; <span class="comment">//distanceMap[(ri-1)*input_-&gt;width + ci-1] + 1.4f;</span></div>
<div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> up      = previous_row [ci] + 1.0f;     <span class="comment">//distanceMap[(ri-1)*input_-&gt;width + ci] + 1.0f;</span></div>
<div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> upRight = previous_row [ci + 1] + 1.4f; <span class="comment">//distanceMap[(ri-1)*input_-&gt;width + ci+1] + 1.4f;</span></div>
<div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> left    = current_row  [ci - 1] + 1.0f;  <span class="comment">//distanceMap[ri*input_-&gt;width + ci-1] + 1.0f;</span></div>
<div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> center  = current_row  [ci];             <span class="comment">//distanceMap[ri*input_-&gt;width + ci];</span></div>
<div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160; </div>
<div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> minValue = std::min (std::min (upLeft, up), std::min (left, upRight));</div>
<div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160; </div>
<div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;      <span class="keywordflow">if</span> (minValue &lt; center)</div>
<div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;        current_row [ci] = minValue; <span class="comment">//distanceMap[ri * input_-&gt;width + ci] = minValue;</span></div>
<div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;    }</div>
<div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;    previous_row = current_row;</div>
<div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;    current_row += <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width;</div>
<div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;  }</div>
<div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160; </div>
<div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;  <span class="keywordtype">float</span>* next_row    = distanceMap + <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width * (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;height - 1);</div>
<div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;  current_row = next_row - <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width;</div>
<div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;  <span class="comment">// second pass</span></div>
<div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> ri = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;height-2; ri &gt;= 0; --ri)</div>
<div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;  {</div>
<div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> ci = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width-2; ci &gt;= 0; --ci)</div>
<div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;    {</div>
<div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> lowerLeft  = next_row [ci - 1] + 1.4f;    <span class="comment">//distanceMap[(ri+1)*input_-&gt;width + ci-1] + 1.4f;</span></div>
<div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> lower      = next_row [ci] + 1.0f;        <span class="comment">//distanceMap[(ri+1)*input_-&gt;width + ci] + 1.0f;</span></div>
<div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> lowerRight = next_row [ci + 1] + 1.4f;    <span class="comment">//distanceMap[(ri+1)*input_-&gt;width + ci+1] + 1.4f;</span></div>
<div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> right      = current_row [ci + 1] + 1.0f; <span class="comment">//distanceMap[ri*input_-&gt;width + ci+1] + 1.0f;</span></div>
<div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> center     = current_row [ci];            <span class="comment">//distanceMap[ri*input_-&gt;width + ci];</span></div>
<div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160; </div>
<div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">float</span> minValue = std::min (std::min (lowerLeft, lower), std::min (right, lowerRight));</div>
<div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160; </div>
<div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;      <span class="keywordflow">if</span> (minValue &lt; center)</div>
<div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;        current_row [ci] = minValue; <span class="comment">//distanceMap[ri*input_-&gt;width + ci] = minValue;</span></div>
<div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;    }</div>
<div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;    next_row = current_row;</div>
<div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;    current_row -= <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width;</div>
<div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;  }</div>
<div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160; </div>
<div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">indices_</a>-&gt;size () &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;size ())</div>
<div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;    <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ac19f02fb42b8330569161f23adf03994">computeFeaturePart</a> (distanceMap, bad_point, output);</div>
<div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;    <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ab710003086195c2724920eae92538e48">computeFeatureFull</a> (distanceMap, bad_point, output);</div>
<div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160; </div>
<div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;  <span class="keyword">delete</span>[] depthChangeMap;</div>
<div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a25d9fff5422e0c591e78f04c4e9ca17c"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a25d9fff5422e0c591e78f04c4e9ca17c">pcl::IntegralImageNormalEstimation::distance_map_</a></div><div class="ttdeci">float * distance_map_</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:420</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_ab710003086195c2724920eae92538e48"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#ab710003086195c2724920eae92538e48">pcl::IntegralImageNormalEstimation::computeFeatureFull</a></div><div class="ttdeci">void computeFeatureFull(const float *distance_map, const float &amp;bad_point, PointCloudOut &amp;output)</div><div class="ttdoc">Computes the normal for the complete cloud.</div><div class="ttdef"><b>Definition:</b> integral_image_normal.hpp:829</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_abefcbb0a1e92132dd87ccda6d55ccb69"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#abefcbb0a1e92132dd87ccda6d55ccb69">pcl::IntegralImageNormalEstimation::max_depth_change_factor_</a></div><div class="ttdeci">float max_depth_change_factor_</div><div class="ttdoc">Threshold for detecting depth discontinuities</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:426</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_ac19f02fb42b8330569161f23adf03994"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#ac19f02fb42b8330569161f23adf03994">pcl::IntegralImageNormalEstimation::computeFeaturePart</a></div><div class="ttdeci">void computeFeaturePart(const float *distance_map, const float &amp;bad_point, PointCloudOut &amp;output)</div><div class="ttdoc">Computes the normal for part of the cloud specified by indices_</div><div class="ttdef"><b>Definition:</b> integral_image_normal.hpp:1016</div></div>
<div class="ttc" id="aclasspcl_1_1_p_c_l_base_html_a09c70d8e06e3fb4f07903fe6f8d67869"><div class="ttname"><a href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">pcl::PCLBase&lt; PointInT &gt;::input_</a></div><div class="ttdeci">PointCloudConstPtr input_</div><div class="ttdoc">The input point cloud dataset.</div><div class="ttdef"><b>Definition:</b> pcl_base.h:150</div></div>
<div class="ttc" id="aclasspcl_1_1_p_c_l_base_html_aaee847c8a517ebf365bad2cb182a6626"><div class="ttname"><a href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">pcl::PCLBase&lt; PointInT &gt;::indices_</a></div><div class="ttdeci">IndicesPtr indices_</div><div class="ttdoc">A pointer to the vector of point indices to use.</div><div class="ttdef"><b>Definition:</b> pcl_base.h:153</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ab710003086195c2724920eae92538e48"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab710003086195c2724920eae92538e48">&#9670;&nbsp;</a></span>computeFeatureFull()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::computeFeatureFull </td>
          <td>(</td>
          <td class="paramtype">const float *&#160;</td>
          <td class="paramname"><em>distance_map</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const float &amp;&#160;</td>
          <td class="paramname"><em>bad_point</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a> &amp;&#160;</td>
          <td class="paramname"><em>output</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Computes the normal for the complete cloud. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">distance_map</td><td>distance map </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bad_point</td><td>constant given to invalid normal components </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>the resultant normals </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;{</div>
<div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;  <span class="keywordtype">unsigned</span> index = 0;</div>
<div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160; </div>
<div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a2fd09580d6e2e617c605b294aba5043d">border_policy_</a> == BORDER_POLICY_IGNORE)</div>
<div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;  {</div>
<div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;    <span class="comment">// Set all normals that we do not touch to NaN</span></div>
<div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;    <span class="comment">// top and bottom borders</span></div>
<div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;    <span class="comment">// That sets the output density to false!</span></div>
<div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;    output.is_dense = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;    <span class="keywordtype">unsigned</span> border = int(normal_smoothing_size_);</div>
<div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;    PointOutT* vec1 = &amp;output [0];</div>
<div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;    PointOutT* vec2 = vec1 + <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width * (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;height - border);</div>
<div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160; </div>
<div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;    <span class="keywordtype">size_t</span> count = border * <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width;</div>
<div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> idx = 0; idx &lt; count; ++idx)</div>
<div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;    {</div>
<div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;      vec1 [idx].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;      vec1 [idx].curvature = bad_point;</div>
<div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;      vec2 [idx].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;      vec2 [idx].curvature = bad_point;</div>
<div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;    }</div>
<div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160; </div>
<div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;    <span class="comment">// left and right borders actually columns</span></div>
<div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;    vec1 = &amp;output [border * <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width];</div>
<div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;    vec2 = vec1 + <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width - border;</div>
<div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ri = border; ri &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;height - border; ++ri, vec1 += <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width, vec2 += <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width)</div>
<div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;    {</div>
<div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ci = 0; ci &lt; border; ++ci)</div>
<div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;      {</div>
<div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;        vec1 [ci].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;        vec1 [ci].curvature = bad_point;</div>
<div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;        vec2 [ci].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;        vec2 [ci].curvature = bad_point;</div>
<div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;      }</div>
<div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;    }</div>
<div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160; </div>
<div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a66bbb5f2f74a9f8ccfaba482037cae47">use_depth_dependent_smoothing_</a>)</div>
<div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;    {</div>
<div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;      index = border + <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width * border;</div>
<div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;      <span class="keywordtype">unsigned</span> skip = (border &lt;&lt; 1);</div>
<div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> ri = border; ri &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;height - border; ++ri, index += skip)</div>
<div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;      {</div>
<div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> ci = border; ci &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width - border; ++ci, ++index)</div>
<div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;        {</div>
<div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;          index = ri * <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width + ci;</div>
<div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160; </div>
<div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;          <span class="keyword">const</span> <span class="keywordtype">float</span> depth = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[index].z;</div>
<div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;          <span class="keywordflow">if</span> (!pcl_isfinite (depth))</div>
<div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;          {</div>
<div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;            output[index].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;            output[index].curvature = bad_point;</div>
<div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;            <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;          }</div>
<div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160; </div>
<div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;          <span class="keywordtype">float</span> smoothing = (std::min)(distanceMap[index], normal_smoothing_size_ + <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(depth)/10.0f);</div>
<div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160; </div>
<div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;          <span class="keywordflow">if</span> (smoothing &gt; 2.0f)</div>
<div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;          {</div>
<div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;            <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a51049e633396d653658a771a7be0bb9d">setRectSize</a> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing), <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing));</div>
<div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;            <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#abd934a08c5d9bf148833a21e6892303a">computePointNormal</a> (ci, ri, index, output [index]);</div>
<div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;          }</div>
<div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;          <span class="keywordflow">else</span></div>
<div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;          {</div>
<div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;            output[index].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;            output[index].curvature = bad_point;</div>
<div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;          }</div>
<div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;        }</div>
<div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;      }</div>
<div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;    }</div>
<div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;    {</div>
<div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;      <span class="keywordtype">float</span> smoothing_constant = normal_smoothing_size_;</div>
<div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160; </div>
<div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;      index = border + <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width * border;</div>
<div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;      <span class="keywordtype">unsigned</span> skip = (border &lt;&lt; 1);</div>
<div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> ri = border; ri &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;height - border; ++ri, index += skip)</div>
<div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;      {</div>
<div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> ci = border; ci &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width - border; ++ci, ++index)</div>
<div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;        {</div>
<div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;          index = ri * <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width + ci;</div>
<div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160; </div>
<div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;          <span class="keywordflow">if</span> (!pcl_isfinite (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[index].z))</div>
<div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;          {</div>
<div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;            output [index].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;            output [index].curvature = bad_point;</div>
<div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;            <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;          }</div>
<div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160; </div>
<div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;          <span class="keywordtype">float</span> smoothing = (std::min)(distanceMap[index], smoothing_constant);</div>
<div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160; </div>
<div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;          <span class="keywordflow">if</span> (smoothing &gt; 2.0f)</div>
<div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;          {</div>
<div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;            <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a51049e633396d653658a771a7be0bb9d">setRectSize</a> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing), <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing));</div>
<div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;            <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#abd934a08c5d9bf148833a21e6892303a">computePointNormal</a> (ci, ri, index, output [index]);</div>
<div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;          }</div>
<div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;          <span class="keywordflow">else</span></div>
<div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;          {</div>
<div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;            output [index].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;            output [index].curvature = bad_point;</div>
<div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;          }</div>
<div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;        }</div>
<div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;      }</div>
<div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;    }</div>
<div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;  }</div>
<div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a2fd09580d6e2e617c605b294aba5043d">border_policy_</a> == BORDER_POLICY_MIRROR)</div>
<div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;  {</div>
<div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;    output.is_dense = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160; </div>
<div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a66bbb5f2f74a9f8ccfaba482037cae47">use_depth_dependent_smoothing_</a>)</div>
<div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;    {</div>
<div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;      <span class="comment">//index = 0;</span></div>
<div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;      <span class="comment">//unsigned skip = 0;</span></div>
<div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;      <span class="comment">//for (unsigned ri = 0; ri &lt; input_-&gt;height; ++ri, index += skip)</span></div>
<div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> ri = 0; ri &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;height; ++ri)</div>
<div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;      {</div>
<div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;        <span class="comment">//for (unsigned ci = 0; ci &lt; input_-&gt;width; ++ci, ++index)</span></div>
<div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> ci = 0; ci &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width; ++ci)</div>
<div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;        {</div>
<div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;          index = ri * <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width + ci;</div>
<div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160; </div>
<div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;          <span class="keyword">const</span> <span class="keywordtype">float</span> depth = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[index].z;</div>
<div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;          <span class="keywordflow">if</span> (!pcl_isfinite (depth))</div>
<div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;          {</div>
<div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;            output[index].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;            output[index].curvature = bad_point;</div>
<div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;            <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;          }</div>
<div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160; </div>
<div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;          <span class="keywordtype">float</span> smoothing = (std::min)(distanceMap[index], normal_smoothing_size_ + <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(depth)/10.0f);</div>
<div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160; </div>
<div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;          <span class="keywordflow">if</span> (smoothing &gt; 2.0f)</div>
<div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;          {</div>
<div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;            <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a51049e633396d653658a771a7be0bb9d">setRectSize</a> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing), <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing));</div>
<div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;            <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae4653eef47ea949d65d16178549aae1a">computePointNormalMirror</a> (ci, ri, index, output [index]);</div>
<div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;          }</div>
<div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;          <span class="keywordflow">else</span></div>
<div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;          {</div>
<div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;            output[index].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;            output[index].curvature = bad_point;</div>
<div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;          }</div>
<div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;        }</div>
<div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;      }</div>
<div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;    }</div>
<div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;    {</div>
<div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;      <span class="keywordtype">float</span> smoothing_constant = normal_smoothing_size_;</div>
<div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160; </div>
<div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;      <span class="comment">//index = border + input_-&gt;width * border;</span></div>
<div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;      <span class="comment">//unsigned skip = (border &lt;&lt; 1);</span></div>
<div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;      <span class="comment">//for (unsigned ri = border; ri &lt; input_-&gt;height - border; ++ri, index += skip)</span></div>
<div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> ri = 0; ri &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;height; ++ri)</div>
<div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;      {</div>
<div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;        <span class="comment">//for (unsigned ci = border; ci &lt; input_-&gt;width - border; ++ci, ++index)</span></div>
<div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> ci = 0; ci &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width; ++ci)</div>
<div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;        {</div>
<div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;          index = ri * <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width + ci;</div>
<div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160; </div>
<div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;          <span class="keywordflow">if</span> (!pcl_isfinite (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[index].z))</div>
<div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;          {</div>
<div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;            output [index].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;            output [index].curvature = bad_point;</div>
<div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;            <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;          }</div>
<div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160; </div>
<div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;          <span class="keywordtype">float</span> smoothing = (std::min)(distanceMap[index], smoothing_constant);</div>
<div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160; </div>
<div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;          <span class="keywordflow">if</span> (smoothing &gt; 2.0f)</div>
<div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;          {</div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;            <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a51049e633396d653658a771a7be0bb9d">setRectSize</a> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing), <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing));</div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;            <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae4653eef47ea949d65d16178549aae1a">computePointNormalMirror</a> (ci, ri, index, output [index]);</div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;          }</div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;          <span class="keywordflow">else</span></div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;          {</div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;            output [index].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;            output [index].curvature = bad_point;</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;          }</div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;        }</div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;      }</div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;    }</div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;  }</div>
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a2fd09580d6e2e617c605b294aba5043d"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a2fd09580d6e2e617c605b294aba5043d">pcl::IntegralImageNormalEstimation::border_policy_</a></div><div class="ttdeci">BorderPolicy border_policy_</div><div class="ttdoc">The policy for handling borders.</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:388</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a51049e633396d653658a771a7be0bb9d"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a51049e633396d653658a771a7be0bb9d">pcl::IntegralImageNormalEstimation::setRectSize</a></div><div class="ttdeci">void setRectSize(const int width, const int height)</div><div class="ttdoc">Set the regions size which is considered for normal estimation.</div><div class="ttdef"><b>Definition:</b> integral_image_normal.hpp:93</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a66bbb5f2f74a9f8ccfaba482037cae47"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a66bbb5f2f74a9f8ccfaba482037cae47">pcl::IntegralImageNormalEstimation::use_depth_dependent_smoothing_</a></div><div class="ttdeci">bool use_depth_dependent_smoothing_</div><div class="ttdoc">Smooth data based on depth (true/false).</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:423</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_abd934a08c5d9bf148833a21e6892303a"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#abd934a08c5d9bf148833a21e6892303a">pcl::IntegralImageNormalEstimation::computePointNormal</a></div><div class="ttdeci">void computePointNormal(const int pos_x, const int pos_y, const unsigned point_index, PointOutT &amp;normal)</div><div class="ttdoc">Computes the normal at the specified position.</div><div class="ttdef"><b>Definition:</b> integral_image_normal.hpp:207</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_ae4653eef47ea949d65d16178549aae1a"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#ae4653eef47ea949d65d16178549aae1a">pcl::IntegralImageNormalEstimation::computePointNormalMirror</a></div><div class="ttdeci">void computePointNormalMirror(const int pos_x, const int pos_y, const unsigned point_index, PointOutT &amp;normal)</div><div class="ttdoc">Computes the normal at the specified position with mirroring for border handling.</div><div class="ttdef"><b>Definition:</b> integral_image_normal.hpp:462</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ac19f02fb42b8330569161f23adf03994"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac19f02fb42b8330569161f23adf03994">&#9670;&nbsp;</a></span>computeFeaturePart()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::computeFeaturePart </td>
          <td>(</td>
          <td class="paramtype">const float *&#160;</td>
          <td class="paramname"><em>distance_map</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const float &amp;&#160;</td>
          <td class="paramname"><em>bad_point</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a> &amp;&#160;</td>
          <td class="paramname"><em>output</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Computes the normal for part of the cloud specified by <em>indices_</em> </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">distance_map</td><td>distance map </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bad_point</td><td>constant given to invalid normal components </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>the resultant normals </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;{</div>
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a2fd09580d6e2e617c605b294aba5043d">border_policy_</a> == BORDER_POLICY_IGNORE)</div>
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;  {</div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;    output.is_dense = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;    <span class="keywordtype">unsigned</span> border = int(normal_smoothing_size_);</div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;    <span class="keywordtype">unsigned</span> bottom = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;height &gt; border ? <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;height - border : 0;</div>
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;    <span class="keywordtype">unsigned</span> right = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width &gt; border ? <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width - border : 0;</div>
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a66bbb5f2f74a9f8ccfaba482037cae47">use_depth_dependent_smoothing_</a>)</div>
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;    {</div>
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;      <span class="comment">// Iterating over the entire index vector</span></div>
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;      <span class="keywordflow">for</span> (std::size_t idx = 0; idx &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">indices_</a>-&gt;size (); ++idx)</div>
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;      {</div>
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;        <span class="keywordtype">unsigned</span> pt_index = (*indices_)[idx];</div>
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;        <span class="keywordtype">unsigned</span> u = pt_index % <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width;</div>
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;        <span class="keywordtype">unsigned</span> v = pt_index / <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width;</div>
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;        <span class="keywordflow">if</span> (v &lt; border || v &gt; bottom)</div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;        {</div>
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;          output.points[idx].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;          output.points[idx].curvature = bad_point;</div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;          <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;        }</div>
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; </div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;        <span class="keywordflow">if</span> (u &lt; border || v &gt; right)</div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;        {</div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;          output.points[idx].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;          output.points[idx].curvature = bad_point;</div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;          <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;        }</div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; </div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">float</span> depth = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[pt_index].z;</div>
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;        <span class="keywordflow">if</span> (!pcl_isfinite (depth))</div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;        {</div>
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;          output.points[idx].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;          output.points[idx].curvature = bad_point;</div>
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;          <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;        }</div>
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; </div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;        <span class="keywordtype">float</span> smoothing = (std::min)(distanceMap[pt_index], normal_smoothing_size_ + <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(depth)/10.0f);</div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;        <span class="keywordflow">if</span> (smoothing &gt; 2.0f)</div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;        {</div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;          <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a51049e633396d653658a771a7be0bb9d">setRectSize</a> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing), <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing));</div>
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;          <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#abd934a08c5d9bf148833a21e6892303a">computePointNormal</a> (u, v, pt_index, output [idx]);</div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;        }</div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;        <span class="keywordflow">else</span></div>
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;        {</div>
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;          output[idx].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;          output[idx].curvature = bad_point;</div>
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;        }</div>
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;      }</div>
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;    }</div>
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;    {</div>
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;      <span class="keywordtype">float</span> smoothing_constant = normal_smoothing_size_;</div>
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;      <span class="comment">// Iterating over the entire index vector</span></div>
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;      <span class="keywordflow">for</span> (std::size_t idx = 0; idx &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">indices_</a>-&gt;size (); ++idx)</div>
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;      {</div>
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;        <span class="keywordtype">unsigned</span> pt_index = (*indices_)[idx];</div>
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;        <span class="keywordtype">unsigned</span> u = pt_index % <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width;</div>
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;        <span class="keywordtype">unsigned</span> v = pt_index / <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width;</div>
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;        <span class="keywordflow">if</span> (v &lt; border || v &gt; bottom)</div>
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;        {</div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;          output.points[idx].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;          output.points[idx].curvature = bad_point;</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;          <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;        }</div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; </div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;        <span class="keywordflow">if</span> (u &lt; border || v &gt; right)</div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;        {</div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;          output.points[idx].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;          output.points[idx].curvature = bad_point;</div>
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;          <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;        }</div>
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; </div>
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;        <span class="keywordflow">if</span> (!pcl_isfinite (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[pt_index].z))</div>
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;        {</div>
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;          output [idx].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;          output [idx].curvature = bad_point;</div>
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;          <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;        }</div>
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; </div>
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;        <span class="keywordtype">float</span> smoothing = (std::min)(distanceMap[pt_index], smoothing_constant);</div>
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; </div>
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;        <span class="keywordflow">if</span> (smoothing &gt; 2.0f)</div>
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;        {</div>
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;          <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a51049e633396d653658a771a7be0bb9d">setRectSize</a> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing), <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing));</div>
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;          <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#abd934a08c5d9bf148833a21e6892303a">computePointNormal</a> (u, v, pt_index, output [idx]);</div>
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;        }</div>
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;        <span class="keywordflow">else</span></div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;        {</div>
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;          output [pt_index].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;          output [pt_index].curvature = bad_point;</div>
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;        }</div>
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;      }</div>
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;    }</div>
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;  }<span class="comment">// border_policy_ == BORDER_POLICY_IGNORE</span></div>
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a2fd09580d6e2e617c605b294aba5043d">border_policy_</a> == BORDER_POLICY_MIRROR)</div>
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;  {</div>
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;    output.is_dense = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; </div>
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a66bbb5f2f74a9f8ccfaba482037cae47">use_depth_dependent_smoothing_</a>)</div>
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;    {</div>
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;      <span class="keywordflow">for</span> (std::size_t idx = 0; idx &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">indices_</a>-&gt;size (); ++idx)</div>
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;      {</div>
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;        <span class="keywordtype">unsigned</span> pt_index = (*indices_)[idx];</div>
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;        <span class="keywordtype">unsigned</span> u = pt_index % <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width;</div>
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;        <span class="keywordtype">unsigned</span> v = pt_index / <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width;</div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; </div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">float</span> depth = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[pt_index].z;</div>
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;        <span class="keywordflow">if</span> (!pcl_isfinite (depth))</div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;        {</div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;          output[idx].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;          output[idx].curvature = bad_point;</div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;          <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;        }</div>
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; </div>
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;        <span class="keywordtype">float</span> smoothing = (std::min)(distanceMap[pt_index], normal_smoothing_size_ + <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(depth)/10.0f);</div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; </div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;        <span class="keywordflow">if</span> (smoothing &gt; 2.0f)</div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;        {</div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;          <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a51049e633396d653658a771a7be0bb9d">setRectSize</a> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing), <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing));</div>
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;          <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae4653eef47ea949d65d16178549aae1a">computePointNormalMirror</a> (u, v, pt_index, output [idx]);</div>
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;        }</div>
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;        <span class="keywordflow">else</span></div>
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;        {</div>
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;          output[idx].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;          output[idx].curvature = bad_point;</div>
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;        }</div>
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;      }</div>
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;    }</div>
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;    {</div>
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;      <span class="keywordtype">float</span> smoothing_constant = normal_smoothing_size_;</div>
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> idx = 0; idx &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">indices_</a>-&gt;size (); ++idx)</div>
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;      {</div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;        <span class="keywordtype">unsigned</span> pt_index = (*indices_)[idx];</div>
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;        <span class="keywordtype">unsigned</span> u = pt_index % <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width;</div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;        <span class="keywordtype">unsigned</span> v = pt_index / <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width;</div>
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; </div>
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;        <span class="keywordflow">if</span> (!pcl_isfinite (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[pt_index].z))</div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;        {</div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;          output [idx].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;          output [idx].curvature = bad_point;</div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;          <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;        }</div>
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; </div>
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;        <span class="keywordtype">float</span> smoothing = (std::min)(distanceMap[pt_index], smoothing_constant);</div>
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; </div>
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;        <span class="keywordflow">if</span> (smoothing &gt; 2.0f)</div>
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;        {</div>
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;          <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a51049e633396d653658a771a7be0bb9d">setRectSize</a> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing), <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (smoothing));</div>
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;          <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae4653eef47ea949d65d16178549aae1a">computePointNormalMirror</a> (u, v, pt_index, output [idx]);</div>
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;        }</div>
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;        <span class="keywordflow">else</span></div>
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;        {</div>
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;          output [idx].getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;          output [idx].curvature = bad_point;</div>
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;        }</div>
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;      }</div>
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;    }</div>
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;  } <span class="comment">// border_policy_ == BORDER_POLICY_MIRROR</span></div>
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="abd934a08c5d9bf148833a21e6892303a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abd934a08c5d9bf148833a21e6892303a">&#9670;&nbsp;</a></span>computePointNormal()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::computePointNormal </td>
          <td>(</td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>pos_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>pos_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned&#160;</td>
          <td class="paramname"><em>point_index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">PointOutT &amp;&#160;</td>
          <td class="paramname"><em>normal</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Computes the normal at the specified position. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pos_x</td><td>x position (pixel) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pos_y</td><td>y position (pixel) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">point_index</td><td>the position index of the point </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">normal</td><td>the output estimated normal </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;{</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;  <span class="keywordtype">float</span> bad_point = std::numeric_limits&lt;float&gt;::quiet_NaN ();</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160; </div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a1837784fa20205739013c9df638468f5">normal_estimation_method_</a> == COVARIANCE_MATRIX)</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;  {</div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a84d1ed7c0ff6e1cc87ce8a36083130e8">init_covariance_matrix_</a>)</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;      <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a168c03eb1553206db701656fdb0a69ba">initCovarianceMatrixMethod</a> ();</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160; </div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    <span class="keywordtype">unsigned</span> count = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a903b437af66404b7f634f69a45a493ec">integral_image_XYZ_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#aa00fe3e093b0a36f865f2e8f5fda6f85">getFiniteElementsCount</a> (pos_x - (rect_width_2_), pos_y - (rect_height_2_), <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae61a7763129eaec087768796ee431cc3">rect_width_</a>, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a9fddd3a5350251f9a2c8ccbc16a35cd5">rect_height_</a>);</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160; </div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    <span class="comment">// no valid points within the rectangular reagion?</span></div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <span class="keywordflow">if</span> (count == 0)</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    {</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;      normal.normal_x = normal.normal_y = normal.normal_z = normal.curvature = bad_point;</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    }</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160; </div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    EIGEN_ALIGN16 Eigen::Matrix3f covariance_matrix;</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    Eigen::Vector3f center;</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    <span class="keyword">typename</span> IntegralImage2D&lt;float, 3&gt;::SecondOrderType so_elements;</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    center = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a903b437af66404b7f634f69a45a493ec">integral_image_XYZ_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#a70bfd91805661121e56c107a98a5fd1c">getFirstOrderSum</a>(pos_x - rect_width_2_, pos_y - rect_height_2_, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae61a7763129eaec087768796ee431cc3">rect_width_</a>, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a9fddd3a5350251f9a2c8ccbc16a35cd5">rect_height_</a>).template cast&lt;float&gt; ();</div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    so_elements = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a903b437af66404b7f634f69a45a493ec">integral_image_XYZ_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#af813d8e28b73a34bc9c9d492b1bf1cb9">getSecondOrderSum</a>(pos_x - rect_width_2_, pos_y - rect_height_2_, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae61a7763129eaec087768796ee431cc3">rect_width_</a>, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a9fddd3a5350251f9a2c8ccbc16a35cd5">rect_height_</a>);</div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160; </div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    covariance_matrix.coeffRef (0) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (so_elements [0]);</div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    covariance_matrix.coeffRef (1) = covariance_matrix.coeffRef (3) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (so_elements [1]);</div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    covariance_matrix.coeffRef (2) = covariance_matrix.coeffRef (6) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (so_elements [2]);</div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    covariance_matrix.coeffRef (4) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (so_elements [3]);</div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    covariance_matrix.coeffRef (5) = covariance_matrix.coeffRef (7) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (so_elements [4]);</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    covariance_matrix.coeffRef (8) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (so_elements [5]);</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    covariance_matrix -= (center * center.transpose ()) / <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (count);</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    <span class="keywordtype">float</span> eigen_value;</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    Eigen::Vector3f eigen_vector;</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    <a class="code" href="group__common.html#gaca873868052e7d26efcf4b684a17bef2">pcl::eigen33</a> (covariance_matrix, eigen_value, eigen_vector);</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a52a687473809f48f6a6ba4238767cb63">flipNormalTowardsViewpoint</a> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index], <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a40c07d1b44f4107d695842fcff3a87ce">vpx_</a>, vpy_, vpz_, eigen_vector[0], eigen_vector[1], eigen_vector[2]);</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    normal.getNormalVector3fMap () = eigen_vector;</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160; </div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    <span class="comment">// Compute the curvature surface change</span></div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    <span class="keywordflow">if</span> (eigen_value &gt; 0.0)</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;      normal.curvature = fabsf (eigen_value / (covariance_matrix.coeff (0) + covariance_matrix.coeff (4) + covariance_matrix.coeff (8)));</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;      normal.curvature = 0;</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160; </div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;  }</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a1837784fa20205739013c9df638468f5">normal_estimation_method_</a> == AVERAGE_3D_GRADIENT)</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;  {</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#adf25d44bad467ec0e351426f80d1b4d0">init_average_3d_gradient_</a>)</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;      <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#aea7b9064b3ccab7deb396ec16ada6200">initAverage3DGradientMethod</a> ();</div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160; </div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    <span class="keywordtype">unsigned</span> count_x = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#af125b60aeeef1334a25d24e5c2756d87">integral_image_DX_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#aa00fe3e093b0a36f865f2e8f5fda6f85">getFiniteElementsCount</a> (pos_x - rect_width_2_, pos_y - rect_height_2_, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae61a7763129eaec087768796ee431cc3">rect_width_</a>, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a9fddd3a5350251f9a2c8ccbc16a35cd5">rect_height_</a>);</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    <span class="keywordtype">unsigned</span> count_y = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a33e102529db567625037f7e15bb9bb4d">integral_image_DY_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#aa00fe3e093b0a36f865f2e8f5fda6f85">getFiniteElementsCount</a> (pos_x - rect_width_2_, pos_y - rect_height_2_, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae61a7763129eaec087768796ee431cc3">rect_width_</a>, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a9fddd3a5350251f9a2c8ccbc16a35cd5">rect_height_</a>);</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    <span class="keywordflow">if</span> (count_x == 0 || count_y == 0)</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    {</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;      normal.normal_x = normal.normal_y = normal.normal_z = normal.curvature = bad_point;</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    }</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    Eigen::Vector3d gradient_x = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#af125b60aeeef1334a25d24e5c2756d87">integral_image_DX_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#a70bfd91805661121e56c107a98a5fd1c">getFirstOrderSum</a> (pos_x - rect_width_2_, pos_y - rect_height_2_, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae61a7763129eaec087768796ee431cc3">rect_width_</a>, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a9fddd3a5350251f9a2c8ccbc16a35cd5">rect_height_</a>);</div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    Eigen::Vector3d gradient_y = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a33e102529db567625037f7e15bb9bb4d">integral_image_DY_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#a70bfd91805661121e56c107a98a5fd1c">getFirstOrderSum</a> (pos_x - rect_width_2_, pos_y - rect_height_2_, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae61a7763129eaec087768796ee431cc3">rect_width_</a>, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a9fddd3a5350251f9a2c8ccbc16a35cd5">rect_height_</a>);</div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160; </div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    Eigen::Vector3d normal_vector = gradient_y.cross (gradient_x);</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    <span class="keywordtype">double</span> normal_length = normal_vector.squaredNorm ();</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    <span class="keywordflow">if</span> (normal_length == 0.0f)</div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    {</div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;      normal.getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;      normal.curvature = bad_point;</div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    }</div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160; </div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    normal_vector /= sqrt (normal_length);</div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160; </div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    <span class="keywordtype">float</span> nx = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (normal_vector [0]);</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    <span class="keywordtype">float</span> ny = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (normal_vector [1]);</div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    <span class="keywordtype">float</span> nz = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (normal_vector [2]);</div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160; </div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a52a687473809f48f6a6ba4238767cb63">flipNormalTowardsViewpoint</a> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index], <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a40c07d1b44f4107d695842fcff3a87ce">vpx_</a>, vpy_, vpz_, nx, ny, nz);</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160; </div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    normal.normal_x = nx;</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    normal.normal_y = ny;</div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    normal.normal_z = nz;</div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    normal.curvature = bad_point;</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;  }</div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a1837784fa20205739013c9df638468f5">normal_estimation_method_</a> == AVERAGE_DEPTH_CHANGE)</div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;  {</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a5680182b5bb43369faf0f9dcff1d07a2">init_depth_change_</a>)</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;      <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#adab913e619caca17ebaf950f07a7dc5b">initAverageDepthChangeMethod</a> ();</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160; </div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    <span class="comment">// width and height are at least 3 x 3</span></div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    <span class="keywordtype">unsigned</span> count_L_z = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#aa00fe3e093b0a36f865f2e8f5fda6f85">getFiniteElementsCount</a> (pos_x - rect_width_2_, pos_y - rect_height_4_, rect_width_2_, rect_height_2_);</div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    <span class="keywordtype">unsigned</span> count_R_z = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#aa00fe3e093b0a36f865f2e8f5fda6f85">getFiniteElementsCount</a> (pos_x + 1            , pos_y - rect_height_4_, rect_width_2_, rect_height_2_);</div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    <span class="keywordtype">unsigned</span> count_U_z = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#aa00fe3e093b0a36f865f2e8f5fda6f85">getFiniteElementsCount</a> (pos_x - rect_width_4_, pos_y - rect_height_2_, rect_width_2_, rect_height_2_);</div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    <span class="keywordtype">unsigned</span> count_D_z = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#aa00fe3e093b0a36f865f2e8f5fda6f85">getFiniteElementsCount</a> (pos_x - rect_width_4_, pos_y + 1             , rect_width_2_, rect_height_2_);</div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160; </div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;    <span class="keywordflow">if</span> (count_L_z == 0 || count_R_z == 0 || count_U_z == 0 || count_D_z == 0)</div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    {</div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;      normal.normal_x = normal.normal_y = normal.normal_z = normal.curvature = bad_point;</div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    }</div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160; </div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    <span class="keywordtype">float</span> mean_L_z = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#a70bfd91805661121e56c107a98a5fd1c">getFirstOrderSum</a> (pos_x - rect_width_2_, pos_y - rect_height_4_, rect_width_2_, rect_height_2_) / count_L_z);</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <span class="keywordtype">float</span> mean_R_z = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#a70bfd91805661121e56c107a98a5fd1c">getFirstOrderSum</a> (pos_x + 1            , pos_y - rect_height_4_, rect_width_2_, rect_height_2_) / count_R_z);</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    <span class="keywordtype">float</span> mean_U_z = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#a70bfd91805661121e56c107a98a5fd1c">getFirstOrderSum</a> (pos_x - rect_width_4_, pos_y - rect_height_2_, rect_width_2_, rect_height_2_) / count_U_z);</div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <span class="keywordtype">float</span> mean_D_z = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#a70bfd91805661121e56c107a98a5fd1c">getFirstOrderSum</a> (pos_x - rect_width_4_, pos_y + 1             , rect_width_2_, rect_height_2_) / count_D_z);</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160; </div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    PointInT pointL = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index - rect_width_4_ - 1];</div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    PointInT pointR = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index + rect_width_4_ + 1];</div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    PointInT pointU = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index - rect_height_4_ * <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width - 1];</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    PointInT pointD = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index + rect_height_4_ * <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width + 1];</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160; </div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> mean_x_z = mean_R_z - mean_L_z;</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> mean_y_z = mean_D_z - mean_U_z;</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160; </div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> mean_x_x = pointR.x - pointL.x;</div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> mean_x_y = pointR.y - pointL.y;</div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> mean_y_x = pointD.x - pointU.x;</div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> mean_y_y = pointD.y - pointU.y;</div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160; </div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    <span class="keywordtype">float</span> normal_x = mean_x_y * mean_y_z - mean_x_z * mean_y_y;</div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;    <span class="keywordtype">float</span> normal_y = mean_x_z * mean_y_x - mean_x_x * mean_y_z;</div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    <span class="keywordtype">float</span> normal_z = mean_x_x * mean_y_y - mean_x_y * mean_y_x;</div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160; </div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> normal_length = (normal_x * normal_x + normal_y * normal_y + normal_z * normal_z);</div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160; </div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    <span class="keywordflow">if</span> (normal_length == 0.0f)</div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    {</div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;      normal.getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;      normal.curvature = bad_point;</div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    }</div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160; </div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;    <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a52a687473809f48f6a6ba4238767cb63">flipNormalTowardsViewpoint</a> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index], <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a40c07d1b44f4107d695842fcff3a87ce">vpx_</a>, vpy_, vpz_, normal_x, normal_y, normal_z);</div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    </div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> scale = 1.0f / std::sqrt (normal_length);</div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160; </div>
<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    normal.normal_x = normal_x * scale;</div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    normal.normal_y = normal_y * scale;</div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    normal.normal_z = normal_z * scale;</div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    normal.curvature = bad_point;</div>
<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160; </div>
<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;  }</div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a1837784fa20205739013c9df638468f5">normal_estimation_method_</a> == SIMPLE_3D_GRADIENT)</div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;  {</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a262f078f6cbd2b7d3bcd579b7980f887">init_simple_3d_gradient_</a>)</div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;      <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6f9aab3bed5a81f6d81bbf5495e7514f">initSimple3DGradientMethod</a> ();</div>
<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160; </div>
<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    <span class="comment">// this method does not work if lots of NaNs are in the neighborhood of the point</span></div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    Eigen::Vector3d gradient_x = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a903b437af66404b7f634f69a45a493ec">integral_image_XYZ_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#a70bfd91805661121e56c107a98a5fd1c">getFirstOrderSum</a> (pos_x + rect_width_2_, pos_y - rect_height_2_, 1, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a9fddd3a5350251f9a2c8ccbc16a35cd5">rect_height_</a>) -</div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;                                 <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a903b437af66404b7f634f69a45a493ec">integral_image_XYZ_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#a70bfd91805661121e56c107a98a5fd1c">getFirstOrderSum</a> (pos_x - rect_width_2_, pos_y - rect_height_2_, 1, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a9fddd3a5350251f9a2c8ccbc16a35cd5">rect_height_</a>);</div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160; </div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    Eigen::Vector3d gradient_y = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a903b437af66404b7f634f69a45a493ec">integral_image_XYZ_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#a70bfd91805661121e56c107a98a5fd1c">getFirstOrderSum</a> (pos_x - rect_width_2_, pos_y + rect_height_2_, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae61a7763129eaec087768796ee431cc3">rect_width_</a>, 1) -</div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;                                 <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a903b437af66404b7f634f69a45a493ec">integral_image_XYZ_</a>.<a class="code" href="classpcl_1_1_integral_image2_d.html#a70bfd91805661121e56c107a98a5fd1c">getFirstOrderSum</a> (pos_x - rect_width_2_, pos_y - rect_height_2_, <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae61a7763129eaec087768796ee431cc3">rect_width_</a>, 1);</div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    Eigen::Vector3d normal_vector = gradient_y.cross (gradient_x);</div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    <span class="keywordtype">double</span> normal_length = normal_vector.squaredNorm ();</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    <span class="keywordflow">if</span> (normal_length == 0.0f)</div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    {</div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;      normal.getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;      normal.curvature = bad_point;</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    }</div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160; </div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    normal_vector /= sqrt (normal_length);</div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160; </div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;    <span class="keywordtype">float</span> nx = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (normal_vector [0]);</div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    <span class="keywordtype">float</span> ny = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (normal_vector [1]);</div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    <span class="keywordtype">float</span> nz = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (normal_vector [2]);</div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160; </div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;    <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a52a687473809f48f6a6ba4238767cb63">flipNormalTowardsViewpoint</a> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index], <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a40c07d1b44f4107d695842fcff3a87ce">vpx_</a>, vpy_, vpz_, nx, ny, nz);</div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    </div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    normal.normal_x = nx;</div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    normal.normal_y = ny;</div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    normal.normal_z = nz;</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;    normal.curvature = bad_point;</div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;  }</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160; </div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;  normal.getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;  normal.curvature = bad_point;</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;  <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_integral_image2_d_html_a70bfd91805661121e56c107a98a5fd1c"><div class="ttname"><a href="classpcl_1_1_integral_image2_d.html#a70bfd91805661121e56c107a98a5fd1c">pcl::IntegralImage2D::getFirstOrderSum</a></div><div class="ttdeci">ElementType getFirstOrderSum(unsigned start_x, unsigned start_y, unsigned width, unsigned height) const</div><div class="ttdoc">Compute the first order sum within a given rectangle</div><div class="ttdef"><b>Definition:</b> integral_image2D.hpp:70</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image2_d_html_aa00fe3e093b0a36f865f2e8f5fda6f85"><div class="ttname"><a href="classpcl_1_1_integral_image2_d.html#aa00fe3e093b0a36f865f2e8f5fda6f85">pcl::IntegralImage2D::getFiniteElementsCount</a></div><div class="ttdeci">unsigned getFiniteElementsCount(unsigned start_x, unsigned start_y, unsigned width, unsigned height) const</div><div class="ttdoc">Compute the number of finite elements within a given rectangle</div><div class="ttdef"><b>Definition:</b> integral_image2D.hpp:98</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image2_d_html_af813d8e28b73a34bc9c9d492b1bf1cb9"><div class="ttname"><a href="classpcl_1_1_integral_image2_d.html#af813d8e28b73a34bc9c9d492b1bf1cb9">pcl::IntegralImage2D::getSecondOrderSum</a></div><div class="ttdeci">SecondOrderType getSecondOrderSum(unsigned start_x, unsigned start_y, unsigned width, unsigned height) const</div><div class="ttdoc">Compute the second order sum within a given rectangle</div><div class="ttdef"><b>Definition:</b> integral_image2D.hpp:84</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a168c03eb1553206db701656fdb0a69ba"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a168c03eb1553206db701656fdb0a69ba">pcl::IntegralImageNormalEstimation::initCovarianceMatrixMethod</a></div><div class="ttdeci">void initCovarianceMatrixMethod()</div><div class="ttdoc">Internal initialization method for COVARIANCE_MATRIX estimation.</div><div class="ttdef"><b>Definition:</b> integral_image_normal.hpp:123</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a1837784fa20205739013c9df638468f5"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a1837784fa20205739013c9df638468f5">pcl::IntegralImageNormalEstimation::normal_estimation_method_</a></div><div class="ttdeci">NormalEstimationMethod normal_estimation_method_</div><div class="ttdoc">The normal estimation method to use. Currently, 3 implementations are provided:</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:385</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a262f078f6cbd2b7d3bcd579b7980f887"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a262f078f6cbd2b7d3bcd579b7980f887">pcl::IntegralImageNormalEstimation::init_simple_3d_gradient_</a></div><div class="ttdeci">bool init_simple_3d_gradient_</div><div class="ttdoc">True when a dataset has been received and the simple 3d gradient data has been initialized.</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:438</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a33e102529db567625037f7e15bb9bb4d"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a33e102529db567625037f7e15bb9bb4d">pcl::IntegralImageNormalEstimation::integral_image_DY_</a></div><div class="ttdeci">IntegralImage2D&lt; float, 3 &gt; integral_image_DY_</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:405</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a40c07d1b44f4107d695842fcff3a87ce"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a40c07d1b44f4107d695842fcff3a87ce">pcl::IntegralImageNormalEstimation::vpx_</a></div><div class="ttdeci">float vpx_</div><div class="ttdoc">Values describing the viewpoint (&quot;pinhole&quot; camera model assumed). For per point viewpoints,...</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:445</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a52a687473809f48f6a6ba4238767cb63"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a52a687473809f48f6a6ba4238767cb63">pcl::IntegralImageNormalEstimation::flipNormalTowardsViewpoint</a></div><div class="ttdeci">void flipNormalTowardsViewpoint(const PointInT &amp;point, float vp_x, float vp_y, float vp_z, float &amp;nx, float &amp;ny, float &amp;nz)</div><div class="ttdoc">Flip (in place) the estimated normal of a point towards a given viewpoint</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:358</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a5680182b5bb43369faf0f9dcff1d07a2"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a5680182b5bb43369faf0f9dcff1d07a2">pcl::IntegralImageNormalEstimation::init_depth_change_</a></div><div class="ttdeci">bool init_depth_change_</div><div class="ttdoc">True when a dataset has been received and the depth change data has been initialized.</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:441</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a6d6deebd64e2fab423a97ef61387e94a"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">pcl::IntegralImageNormalEstimation::integral_image_depth_</a></div><div class="ttdeci">IntegralImage2D&lt; float, 1 &gt; integral_image_depth_</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:407</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a6f9aab3bed5a81f6d81bbf5495e7514f"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a6f9aab3bed5a81f6d81bbf5495e7514f">pcl::IntegralImageNormalEstimation::initSimple3DGradientMethod</a></div><div class="ttdeci">void initSimple3DGradientMethod()</div><div class="ttdoc">Internal initialization method for SIMPLE_3D_GRADIENT estimation.</div><div class="ttdef"><b>Definition:</b> integral_image_normal.hpp:105</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a84d1ed7c0ff6e1cc87ce8a36083130e8"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a84d1ed7c0ff6e1cc87ce8a36083130e8">pcl::IntegralImageNormalEstimation::init_covariance_matrix_</a></div><div class="ttdeci">bool init_covariance_matrix_</div><div class="ttdoc">True when a dataset has been received and the covariance_matrix data has been initialized.</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:432</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a903b437af66404b7f634f69a45a493ec"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a903b437af66404b7f634f69a45a493ec">pcl::IntegralImageNormalEstimation::integral_image_XYZ_</a></div><div class="ttdeci">IntegralImage2D&lt; float, 3 &gt; integral_image_XYZ_</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:409</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a9fddd3a5350251f9a2c8ccbc16a35cd5"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a9fddd3a5350251f9a2c8ccbc16a35cd5">pcl::IntegralImageNormalEstimation::rect_height_</a></div><div class="ttdeci">int rect_height_</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:395</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_adab913e619caca17ebaf950f07a7dc5b"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#adab913e619caca17ebaf950f07a7dc5b">pcl::IntegralImageNormalEstimation::initAverageDepthChangeMethod</a></div><div class="ttdeci">void initAverageDepthChangeMethod()</div><div class="ttdoc">Internal initialization method for AVERAGE_DEPTH_CHANGE estimation.</div><div class="ttdef"><b>Definition:</b> integral_image_normal.hpp:190</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_adf25d44bad467ec0e351426f80d1b4d0"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#adf25d44bad467ec0e351426f80d1b4d0">pcl::IntegralImageNormalEstimation::init_average_3d_gradient_</a></div><div class="ttdeci">bool init_average_3d_gradient_</div><div class="ttdoc">True when a dataset has been received and the average 3d gradient data has been initialized.</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:435</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_ae61a7763129eaec087768796ee431cc3"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#ae61a7763129eaec087768796ee431cc3">pcl::IntegralImageNormalEstimation::rect_width_</a></div><div class="ttdeci">int rect_width_</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:391</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_aea7b9064b3ccab7deb396ec16ada6200"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#aea7b9064b3ccab7deb396ec16ada6200">pcl::IntegralImageNormalEstimation::initAverage3DGradientMethod</a></div><div class="ttdeci">void initAverage3DGradientMethod()</div><div class="ttdoc">Internal initialization method for AVERAGE_3D_GRADIENT estimation.</div><div class="ttdef"><b>Definition:</b> integral_image_normal.hpp:141</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_af125b60aeeef1334a25d24e5c2756d87"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#af125b60aeeef1334a25d24e5c2756d87">pcl::IntegralImageNormalEstimation::integral_image_DX_</a></div><div class="ttdeci">IntegralImage2D&lt; float, 3 &gt; integral_image_DX_</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:403</div></div>
<div class="ttc" id="agroup__common_html_gaca873868052e7d26efcf4b684a17bef2"><div class="ttname"><a href="group__common.html#gaca873868052e7d26efcf4b684a17bef2">pcl::eigen33</a></div><div class="ttdeci">void eigen33(const Matrix &amp;mat, typename Matrix::Scalar &amp;eigenvalue, Vector &amp;eigenvector)</div><div class="ttdoc">determines the eigenvector and eigenvalue of the smallest eigenvalue of the symmetric positive semi d...</div><div class="ttdef"><b>Definition:</b> eigen.hpp:251</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ae4653eef47ea949d65d16178549aae1a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae4653eef47ea949d65d16178549aae1a">&#9670;&nbsp;</a></span>computePointNormalMirror()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::computePointNormalMirror </td>
          <td>(</td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>pos_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>pos_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned&#160;</td>
          <td class="paramname"><em>point_index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">PointOutT &amp;&#160;</td>
          <td class="paramname"><em>normal</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Computes the normal at the specified position with mirroring for border handling. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pos_x</td><td>x position (pixel) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pos_y</td><td>y position (pixel) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">point_index</td><td>the position index of the point </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">normal</td><td>the output estimated normal </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;{</div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;  <span class="keywordtype">float</span> bad_point = std::numeric_limits&lt;float&gt;::quiet_NaN ();</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160; </div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> width = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;width;</div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> height = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;height;</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160; </div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;  <span class="comment">// ==============================================================</span></div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a1837784fa20205739013c9df638468f5">normal_estimation_method_</a> == COVARIANCE_MATRIX) </div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;  {</div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a84d1ed7c0ff6e1cc87ce8a36083130e8">init_covariance_matrix_</a>)</div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;      <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a168c03eb1553206db701656fdb0a69ba">initCovarianceMatrixMethod</a> ();</div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160; </div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> start_x = pos_x - rect_width_2_;</div>
<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> start_y = pos_y - rect_height_2_;</div>
<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> end_x = start_x + <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae61a7763129eaec087768796ee431cc3">rect_width_</a>;</div>
<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> end_y = start_y + <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a9fddd3a5350251f9a2c8ccbc16a35cd5">rect_height_</a>;</div>
<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160; </div>
<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    <span class="keywordtype">unsigned</span> count = 0;</div>
<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    sumArea&lt;unsigned&gt;(start_x, start_y, end_x, end_y, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#afa15a2cacdd74265922635d908b1f4b7">IntegralImage2D&lt;float, 3&gt;::getFiniteElementsCountSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a903b437af66404b7f634f69a45a493ec">integral_image_XYZ_</a>, _1, _2, _3, _4), count);</div>
<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;    </div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;    <span class="comment">// no valid points within the rectangular reagion?</span></div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    <span class="keywordflow">if</span> (count == 0)</div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;    {</div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;      normal.normal_x = normal.normal_y = normal.normal_z = normal.curvature = bad_point;</div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;    }</div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160; </div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;    EIGEN_ALIGN16 Eigen::Matrix3f covariance_matrix;</div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;    Eigen::Vector3f center;</div>
<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;    <span class="keyword">typename</span> IntegralImage2D&lt;float, 3&gt;::SecondOrderType so_elements;</div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    <span class="keyword">typename</span> IntegralImage2D&lt;float, 3&gt;::ElementType tmp_center;</div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;    <span class="keyword">typename</span> IntegralImage2D&lt;float, 3&gt;::SecondOrderType tmp_so_elements;</div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160; </div>
<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;    center[0] = 0;</div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;    center[1] = 0;</div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;    center[2] = 0;</div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    tmp_center[0] = 0;</div>
<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    tmp_center[1] = 0;</div>
<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;    tmp_center[2] = 0;</div>
<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;    so_elements[0] = 0;</div>
<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;    so_elements[1] = 0;</div>
<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;    so_elements[2] = 0;</div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;    so_elements[3] = 0;</div>
<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;    so_elements[4] = 0;</div>
<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;    so_elements[5] = 0;</div>
<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160; </div>
<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    sumArea&lt;typename IntegralImage2D&lt;float, 3&gt;::ElementType&gt;(start_x, start_y, end_x, end_y, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#a30cbef55397d0222caca466d770e4cd5">IntegralImage2D&lt;float, 3&gt;::getFirstOrderSumSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a903b437af66404b7f634f69a45a493ec">integral_image_XYZ_</a>, _1, _2, _3, _4), tmp_center);</div>
<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    sumArea&lt;typename IntegralImage2D&lt;float, 3&gt;::SecondOrderType&gt;(start_x, start_y, end_x, end_y, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#af420c9be60cc41e0af4406c84b286240">IntegralImage2D&lt;float, 3&gt;::getSecondOrderSumSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a903b437af66404b7f634f69a45a493ec">integral_image_XYZ_</a>, _1, _2, _3, _4), so_elements);</div>
<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160; </div>
<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;    center[0] = float (tmp_center[0]);</div>
<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;    center[1] = float (tmp_center[1]);</div>
<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    center[2] = float (tmp_center[2]);</div>
<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160; </div>
<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    covariance_matrix.coeffRef (0) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (so_elements [0]);</div>
<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;    covariance_matrix.coeffRef (1) = covariance_matrix.coeffRef (3) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (so_elements [1]);</div>
<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;    covariance_matrix.coeffRef (2) = covariance_matrix.coeffRef (6) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (so_elements [2]);</div>
<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;    covariance_matrix.coeffRef (4) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (so_elements [3]);</div>
<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;    covariance_matrix.coeffRef (5) = covariance_matrix.coeffRef (7) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (so_elements [4]);</div>
<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;    covariance_matrix.coeffRef (8) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (so_elements [5]);</div>
<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;    covariance_matrix -= (center * center.transpose ()) / <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (count);</div>
<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    <span class="keywordtype">float</span> eigen_value;</div>
<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    Eigen::Vector3f eigen_vector;</div>
<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;    <a class="code" href="group__common.html#gaca873868052e7d26efcf4b684a17bef2">pcl::eigen33</a> (covariance_matrix, eigen_value, eigen_vector);</div>
<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a52a687473809f48f6a6ba4238767cb63">flipNormalTowardsViewpoint</a> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index], <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a40c07d1b44f4107d695842fcff3a87ce">vpx_</a>, vpy_, vpz_, eigen_vector[0], eigen_vector[1], eigen_vector[2]);</div>
<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    normal.getNormalVector3fMap () = eigen_vector;</div>
<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160; </div>
<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    <span class="comment">// Compute the curvature surface change</span></div>
<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    <span class="keywordflow">if</span> (eigen_value &gt; 0.0)</div>
<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;      normal.curvature = fabsf (eigen_value / (covariance_matrix.coeff (0) + covariance_matrix.coeff (4) + covariance_matrix.coeff (8)));</div>
<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;      normal.curvature = 0;</div>
<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160; </div>
<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;  }</div>
<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;  <span class="comment">// =======================================================</span></div>
<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a1837784fa20205739013c9df638468f5">normal_estimation_method_</a> == AVERAGE_3D_GRADIENT) </div>
<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;  {</div>
<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#adf25d44bad467ec0e351426f80d1b4d0">init_average_3d_gradient_</a>)</div>
<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;      <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#aea7b9064b3ccab7deb396ec16ada6200">initAverage3DGradientMethod</a> ();</div>
<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160; </div>
<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> start_x = pos_x - rect_width_2_;</div>
<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> start_y = pos_y - rect_height_2_;</div>
<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> end_x = start_x + <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae61a7763129eaec087768796ee431cc3">rect_width_</a>;</div>
<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> end_y = start_y + <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a9fddd3a5350251f9a2c8ccbc16a35cd5">rect_height_</a>;</div>
<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160; </div>
<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;    <span class="keywordtype">unsigned</span> count_x = 0;</div>
<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;    <span class="keywordtype">unsigned</span> count_y = 0;</div>
<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160; </div>
<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    sumArea&lt;unsigned&gt;(start_x, start_y, end_x, end_y, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#afa15a2cacdd74265922635d908b1f4b7">IntegralImage2D&lt;float, 3&gt;::getFiniteElementsCountSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#af125b60aeeef1334a25d24e5c2756d87">integral_image_DX_</a>, _1, _2, _3, _4), count_x);</div>
<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    sumArea&lt;unsigned&gt;(start_x, start_y, end_x, end_y, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#afa15a2cacdd74265922635d908b1f4b7">IntegralImage2D&lt;float, 3&gt;::getFiniteElementsCountSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a33e102529db567625037f7e15bb9bb4d">integral_image_DY_</a>, _1, _2, _3, _4), count_y);</div>
<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160; </div>
<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160; </div>
<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    <span class="keywordflow">if</span> (count_x == 0 || count_y == 0)</div>
<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;    {</div>
<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;      normal.normal_x = normal.normal_y = normal.normal_z = normal.curvature = bad_point;</div>
<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    }</div>
<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    Eigen::Vector3d gradient_x (0, 0, 0);</div>
<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    Eigen::Vector3d gradient_y (0, 0, 0);</div>
<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160; </div>
<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;    sumArea&lt;typename IntegralImage2D&lt;float, 3&gt;::ElementType&gt;(start_x, start_y, end_x, end_y, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#a30cbef55397d0222caca466d770e4cd5">IntegralImage2D&lt;float, 3&gt;::getFirstOrderSumSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#af125b60aeeef1334a25d24e5c2756d87">integral_image_DX_</a>, _1, _2, _3, _4), gradient_x);</div>
<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    sumArea&lt;typename IntegralImage2D&lt;float, 3&gt;::ElementType&gt;(start_x, start_y, end_x, end_y, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#a30cbef55397d0222caca466d770e4cd5">IntegralImage2D&lt;float, 3&gt;::getFirstOrderSumSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a33e102529db567625037f7e15bb9bb4d">integral_image_DY_</a>, _1, _2, _3, _4), gradient_y);</div>
<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160; </div>
<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160; </div>
<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;    Eigen::Vector3d normal_vector = gradient_y.cross (gradient_x);</div>
<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    <span class="keywordtype">double</span> normal_length = normal_vector.squaredNorm ();</div>
<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    <span class="keywordflow">if</span> (normal_length == 0.0f)</div>
<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    {</div>
<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;      normal.getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;      normal.curvature = bad_point;</div>
<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    }</div>
<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160; </div>
<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;    normal_vector /= sqrt (normal_length);</div>
<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160; </div>
<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    <span class="keywordtype">float</span> nx = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (normal_vector [0]);</div>
<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;    <span class="keywordtype">float</span> ny = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (normal_vector [1]);</div>
<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;    <span class="keywordtype">float</span> nz = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (normal_vector [2]);</div>
<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160; </div>
<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;    <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a52a687473809f48f6a6ba4238767cb63">flipNormalTowardsViewpoint</a> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index], <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a40c07d1b44f4107d695842fcff3a87ce">vpx_</a>, vpy_, vpz_, nx, ny, nz);</div>
<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160; </div>
<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;    normal.normal_x = nx;</div>
<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;    normal.normal_y = ny;</div>
<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;    normal.normal_z = nz;</div>
<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;    normal.curvature = bad_point;</div>
<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;  }</div>
<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;  <span class="comment">// ======================================================</span></div>
<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a1837784fa20205739013c9df638468f5">normal_estimation_method_</a> == AVERAGE_DEPTH_CHANGE) </div>
<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;  {</div>
<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a5680182b5bb43369faf0f9dcff1d07a2">init_depth_change_</a>)</div>
<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;      <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#adab913e619caca17ebaf950f07a7dc5b">initAverageDepthChangeMethod</a> ();</div>
<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160; </div>
<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;    <span class="keywordtype">int</span> point_index_L_x = pos_x - rect_width_4_ - 1;</div>
<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;    <span class="keywordtype">int</span> point_index_L_y = pos_y;</div>
<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;    <span class="keywordtype">int</span> point_index_R_x = pos_x + rect_width_4_ + 1;</div>
<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;    <span class="keywordtype">int</span> point_index_R_y = pos_y;</div>
<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;    <span class="keywordtype">int</span> point_index_U_x = pos_x - 1;</div>
<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;    <span class="keywordtype">int</span> point_index_U_y = pos_y - rect_height_4_;</div>
<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    <span class="keywordtype">int</span> point_index_D_x = pos_x + 1;</div>
<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;    <span class="keywordtype">int</span> point_index_D_y = pos_y + rect_height_4_;</div>
<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160; </div>
<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;    <span class="keywordflow">if</span> (point_index_L_x &lt; 0)</div>
<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;      point_index_L_x = -point_index_L_x;</div>
<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    <span class="keywordflow">if</span> (point_index_U_x &lt; 0)</div>
<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;      point_index_U_x = -point_index_U_x;</div>
<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;    <span class="keywordflow">if</span> (point_index_U_y &lt; 0)</div>
<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;      point_index_U_y = -point_index_U_y;</div>
<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160; </div>
<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    <span class="keywordflow">if</span> (point_index_R_x &gt;= width)</div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;      point_index_R_x = width-(point_index_R_x-(width-1));</div>
<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    <span class="keywordflow">if</span> (point_index_D_x &gt;= width)</div>
<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;      point_index_D_x = width-(point_index_D_x-(width-1));</div>
<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    <span class="keywordflow">if</span> (point_index_D_y &gt;= height)</div>
<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;      point_index_D_y = height-(point_index_D_y-(height-1));</div>
<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160; </div>
<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> start_x_L = pos_x - rect_width_2_;</div>
<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> start_y_L = pos_y - rect_height_4_;</div>
<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> end_x_L = start_x_L + rect_width_2_;</div>
<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> end_y_L = start_y_L + rect_height_2_;</div>
<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160; </div>
<div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> start_x_R = pos_x + 1;</div>
<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> start_y_R = pos_y - rect_height_4_;</div>
<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> end_x_R = start_x_R + rect_width_2_;</div>
<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> end_y_R = start_y_R + rect_height_2_;</div>
<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160; </div>
<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> start_x_U = pos_x - rect_width_4_;</div>
<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> start_y_U = pos_y - rect_height_2_;</div>
<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> end_x_U = start_x_U + rect_width_2_;</div>
<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> end_y_U = start_y_U + rect_height_2_;</div>
<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160; </div>
<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> start_x_D = pos_x - rect_width_4_;</div>
<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> start_y_D = pos_y + 1;</div>
<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> end_x_D = start_x_D + rect_width_2_;</div>
<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> end_y_D = start_y_D + rect_height_2_;</div>
<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160; </div>
<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;    <span class="keywordtype">unsigned</span> count_L_z = 0;</div>
<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;    <span class="keywordtype">unsigned</span> count_R_z = 0;</div>
<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;    <span class="keywordtype">unsigned</span> count_U_z = 0;</div>
<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;    <span class="keywordtype">unsigned</span> count_D_z = 0;</div>
<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160; </div>
<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    sumArea&lt;unsigned&gt;(start_x_L, start_y_L, end_x_L, end_y_L, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#afa15a2cacdd74265922635d908b1f4b7">IntegralImage2D&lt;float, 1&gt;::getFiniteElementsCountSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>, _1, _2, _3, _4), count_L_z);</div>
<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;    sumArea&lt;unsigned&gt;(start_x_R, start_y_R, end_x_R, end_y_R, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#afa15a2cacdd74265922635d908b1f4b7">IntegralImage2D&lt;float, 1&gt;::getFiniteElementsCountSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>, _1, _2, _3, _4), count_R_z);</div>
<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;    sumArea&lt;unsigned&gt;(start_x_U, start_y_U, end_x_U, end_y_U, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#afa15a2cacdd74265922635d908b1f4b7">IntegralImage2D&lt;float, 1&gt;::getFiniteElementsCountSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>, _1, _2, _3, _4), count_U_z);</div>
<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    sumArea&lt;unsigned&gt;(start_x_D, start_y_D, end_x_D, end_y_D, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#afa15a2cacdd74265922635d908b1f4b7">IntegralImage2D&lt;float, 1&gt;::getFiniteElementsCountSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>, _1, _2, _3, _4), count_D_z);</div>
<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160; </div>
<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    <span class="keywordflow">if</span> (count_L_z == 0 || count_R_z == 0 || count_U_z == 0 || count_D_z == 0)</div>
<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    {</div>
<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;      normal.normal_x = normal.normal_y = normal.normal_z = normal.curvature = bad_point;</div>
<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;    }</div>
<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160; </div>
<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;    <span class="keywordtype">float</span> mean_L_z = 0;</div>
<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;    <span class="keywordtype">float</span> mean_R_z = 0;</div>
<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;    <span class="keywordtype">float</span> mean_U_z = 0;</div>
<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;    <span class="keywordtype">float</span> mean_D_z = 0;</div>
<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160; </div>
<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;    sumArea&lt;float&gt;(start_x_L, start_y_L, end_x_L, end_y_L, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#a30cbef55397d0222caca466d770e4cd5">IntegralImage2D&lt;float, 1&gt;::getFirstOrderSumSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>, _1, _2, _3, _4), mean_L_z);</div>
<div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;    sumArea&lt;float&gt;(start_x_R, start_y_R, end_x_R, end_y_R, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#a30cbef55397d0222caca466d770e4cd5">IntegralImage2D&lt;float, 1&gt;::getFirstOrderSumSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>, _1, _2, _3, _4), mean_R_z);</div>
<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;    sumArea&lt;float&gt;(start_x_U, start_y_U, end_x_U, end_y_U, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#a30cbef55397d0222caca466d770e4cd5">IntegralImage2D&lt;float, 1&gt;::getFirstOrderSumSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>, _1, _2, _3, _4), mean_U_z);</div>
<div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;    sumArea&lt;float&gt;(start_x_D, start_y_D, end_x_D, end_y_D, width, height, boost::bind(&amp;<a class="code" href="classpcl_1_1_integral_image2_d.html#a30cbef55397d0222caca466d770e4cd5">IntegralImage2D&lt;float, 1&gt;::getFirstOrderSumSE</a>, &amp;<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a6d6deebd64e2fab423a97ef61387e94a">integral_image_depth_</a>, _1, _2, _3, _4), mean_D_z);</div>
<div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160; </div>
<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;    mean_L_z /= float (count_L_z);</div>
<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;    mean_R_z /= float (count_R_z);</div>
<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;    mean_U_z /= float (count_U_z);</div>
<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;    mean_D_z /= float (count_D_z);</div>
<div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160; </div>
<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160; </div>
<div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;    PointInT pointL = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index_L_y*width + point_index_L_x];</div>
<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;    PointInT pointR = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index_R_y*width + point_index_R_x];</div>
<div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;    PointInT pointU = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index_U_y*width + point_index_U_x];</div>
<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;    PointInT pointD = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index_D_y*width + point_index_D_x];</div>
<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160; </div>
<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> mean_x_z = mean_R_z - mean_L_z;</div>
<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> mean_y_z = mean_D_z - mean_U_z;</div>
<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160; </div>
<div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> mean_x_x = pointR.x - pointL.x;</div>
<div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> mean_x_y = pointR.y - pointL.y;</div>
<div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> mean_y_x = pointD.x - pointU.x;</div>
<div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> mean_y_y = pointD.y - pointU.y;</div>
<div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160; </div>
<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;    <span class="keywordtype">float</span> normal_x = mean_x_y * mean_y_z - mean_x_z * mean_y_y;</div>
<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;    <span class="keywordtype">float</span> normal_y = mean_x_z * mean_y_x - mean_x_x * mean_y_z;</div>
<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;    <span class="keywordtype">float</span> normal_z = mean_x_x * mean_y_y - mean_x_y * mean_y_x;</div>
<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160; </div>
<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> normal_length = (normal_x * normal_x + normal_y * normal_y + normal_z * normal_z);</div>
<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160; </div>
<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    <span class="keywordflow">if</span> (normal_length == 0.0f)</div>
<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;    {</div>
<div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;      normal.getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;      normal.curvature = bad_point;</div>
<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;    }</div>
<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160; </div>
<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;    <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a52a687473809f48f6a6ba4238767cb63">flipNormalTowardsViewpoint</a> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[point_index], <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a40c07d1b44f4107d695842fcff3a87ce">vpx_</a>, vpy_, vpz_, normal_x, normal_y, normal_z);</div>
<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;    </div>
<div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> scale = 1.0f / std::sqrt (normal_length);</div>
<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160; </div>
<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;    normal.normal_x = normal_x * scale;</div>
<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;    normal.normal_y = normal_y * scale;</div>
<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;    normal.normal_z = normal_z * scale;</div>
<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;    normal.curvature = bad_point;</div>
<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160; </div>
<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;  }</div>
<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;  <span class="comment">// ========================================================</span></div>
<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a1837784fa20205739013c9df638468f5">normal_estimation_method_</a> == SIMPLE_3D_GRADIENT) </div>
<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;  {</div>
<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;    PCL_THROW_EXCEPTION (PCLException, <span class="stringliteral">&quot;BORDER_POLICY_MIRROR not supported for normal estimation method SIMPLE_3D_GRADIENT&quot;</span>);</div>
<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;  }</div>
<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160; </div>
<div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;  normal.getNormalVector3fMap ().setConstant (bad_point);</div>
<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;  normal.curvature = bad_point;</div>
<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;  <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_integral_image2_d_html_a30cbef55397d0222caca466d770e4cd5"><div class="ttname"><a href="classpcl_1_1_integral_image2_d.html#a30cbef55397d0222caca466d770e4cd5">pcl::IntegralImage2D&lt; float, 3 &gt;::getFirstOrderSumSE</a></div><div class="ttdeci">ElementType getFirstOrderSumSE(unsigned start_x, unsigned start_y, unsigned end_x, unsigned end_y) const</div><div class="ttdoc">Compute the first order sum within a given rectangle</div><div class="ttdef"><b>Definition:</b> integral_image2D.hpp:112</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image2_d_html_af420c9be60cc41e0af4406c84b286240"><div class="ttname"><a href="classpcl_1_1_integral_image2_d.html#af420c9be60cc41e0af4406c84b286240">pcl::IntegralImage2D&lt; float, 3 &gt;::getSecondOrderSumSE</a></div><div class="ttdeci">SecondOrderType getSecondOrderSumSE(unsigned start_x, unsigned start_y, unsigned end_x, unsigned end_y) const</div><div class="ttdoc">Compute the second order sum within a given rectangle</div><div class="ttdef"><b>Definition:</b> integral_image2D.hpp:126</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image2_d_html_afa15a2cacdd74265922635d908b1f4b7"><div class="ttname"><a href="classpcl_1_1_integral_image2_d.html#afa15a2cacdd74265922635d908b1f4b7">pcl::IntegralImage2D&lt; float, 3 &gt;::getFiniteElementsCountSE</a></div><div class="ttdeci">unsigned getFiniteElementsCountSE(unsigned start_x, unsigned start_y, unsigned end_x, unsigned end_y) const</div><div class="ttdoc">Compute the number of finite elements within a given rectangle</div><div class="ttdef"><b>Definition:</b> integral_image2D.hpp:140</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a52a687473809f48f6a6ba4238767cb63"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a52a687473809f48f6a6ba4238767cb63">&#9670;&nbsp;</a></span>flipNormalTowardsViewpoint()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::flipNormalTowardsViewpoint </td>
          <td>(</td>
          <td class="paramtype">const PointInT &amp;&#160;</td>
          <td class="paramname"><em>point</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>vp_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>vp_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>vp_z</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>nx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>ny</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>nz</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Flip (in place) the estimated normal of a point towards a given viewpoint </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">point</td><td>a given point </td></tr>
    <tr><td class="paramname">vp_x</td><td>the X coordinate of the viewpoint </td></tr>
    <tr><td class="paramname">vp_y</td><td>the X coordinate of the viewpoint </td></tr>
    <tr><td class="paramname">vp_z</td><td>the X coordinate of the viewpoint </td></tr>
    <tr><td class="paramname">nx</td><td>the resultant X component of the plane normal </td></tr>
    <tr><td class="paramname">ny</td><td>the resultant Y component of the plane normal </td></tr>
    <tr><td class="paramname">nz</td><td>the resultant Z component of the plane normal </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;      {</div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;        <span class="comment">// See if we need to flip any plane normals</span></div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;        vp_x -= point.x;</div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;        vp_y -= point.y;</div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;        vp_z -= point.z;</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160; </div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;        <span class="comment">// Dot product between the (viewpoint - point) and the plane normal</span></div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;        <span class="keywordtype">float</span> cos_theta = (vp_x * nx + vp_y * ny + vp_z * nz);</div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160; </div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;        <span class="comment">// Flip the plane normal</span></div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;        <span class="keywordflow">if</span> (cos_theta &lt; 0)</div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;        {</div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;          nx *= -1;</div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;          ny *= -1;</div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;          nz *= -1;</div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;        }</div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a6919297725dcf7a83ac4e6e4190a09d4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6919297725dcf7a83ac4e6e4190a09d4">&#9670;&nbsp;</a></span>getViewPoint()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::getViewPoint </td>
          <td>(</td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>vpx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>vpy</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>vpz</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the viewpoint. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">vpx</td><td>x-coordinate of the view point </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">vpy</td><td>y-coordinate of the view point </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">vpz</td><td>z-coordinate of the view point </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>this method returns the currently used viewpoint for normal flipping. If the viewpoint is set manually using the setViewPoint method, this method will return the set view point coordinates. If an input cloud is set, it will return the sensor origin otherwise it will return the origin (0, 0, 0) </dd></dl>
<div class="fragment"><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;      {</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;        vpx = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a40c07d1b44f4107d695842fcff3a87ce">vpx_</a>;</div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;        vpy = vpy_;</div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;        vpz = vpz_;</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a1e3a8c0f630638e63146d18690d69920"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1e3a8c0f630638e63146d18690d69920">&#9670;&nbsp;</a></span>setBorderPolicy()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::setBorderPolicy </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a10da239414888271aeb02972f7420780">BorderPolicy</a>&#160;</td>
          <td class="paramname"><em>border_policy</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets the policy for handling borders. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">border_policy</td><td>the border policy. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;      {</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;        <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a2fd09580d6e2e617c605b294aba5043d">border_policy_</a> = border_policy;</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a1da9e189ffb19ba89044a531242656fd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1da9e189ffb19ba89044a531242656fd">&#9670;&nbsp;</a></span>setDepthDependentSmoothing()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::setDepthDependentSmoothing </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>use_depth_dependent_smoothing</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set whether to use depth depending smoothing or not </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">use_depth_dependent_smoothing</td><td>decides whether the smoothing is depth dependent </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;      {</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;        <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a66bbb5f2f74a9f8ccfaba482037cae47">use_depth_dependent_smoothing_</a> = use_depth_dependent_smoothing;</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a03cc1e146b6041a1d3d5a989ad171ee2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a03cc1e146b6041a1d3d5a989ad171ee2">&#9670;&nbsp;</a></span>setInputCloud()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::setInputCloud </td>
          <td>(</td>
          <td class="paramtype">const typename PointCloudIn::ConstPtr &amp;&#160;</td>
          <td class="paramname"><em>cloud</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Provide a pointer to the input dataset (overwrites the <a class="el" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea" title="Provide a pointer to the input dataset">PCLBase::setInputCloud</a> method) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the const boost shared pointer to a <a class="el" href="classpcl_1_1_point_cloud.html" title="PointCloud represents the base class in PCL for storing collections of 3D points.">PointCloud</a> message </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;      {</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;        <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a> = cloud;</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;        <span class="keywordflow">if</span> (!cloud-&gt;isOrganized ())</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        {</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;          PCL_ERROR (<span class="stringliteral">&quot;[pcl::IntegralImageNormalEstimation::setInputCloud] Input dataset is not organized (height = 1).\n&quot;</span>);</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;          <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;        }</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160; </div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;        <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a84d1ed7c0ff6e1cc87ce8a36083130e8">init_covariance_matrix_</a> = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#adf25d44bad467ec0e351426f80d1b4d0">init_average_3d_gradient_</a> = <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a5680182b5bb43369faf0f9dcff1d07a2">init_depth_change_</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        </div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a01207a15920b58b89d97f7c650bfdf22">use_sensor_origin_</a>)</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;        {</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;          <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a40c07d1b44f4107d695842fcff3a87ce">vpx_</a> = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;sensor_origin_.coeff (0);</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;          vpy_ = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;sensor_origin_.coeff (1);</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;          vpz_ = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;sensor_origin_.coeff (2);</div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;        }</div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160; </div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        <span class="comment">// Initialize the correct data structure based on the normal estimation method chosen</span></div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;        <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a214361c92cfa4fb307f973638b71663c">initData</a> ();</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;      }</div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a01207a15920b58b89d97f7c650bfdf22"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a01207a15920b58b89d97f7c650bfdf22">pcl::IntegralImageNormalEstimation::use_sensor_origin_</a></div><div class="ttdeci">bool use_sensor_origin_</div><div class="ttdef"><b>Definition:</b> integral_image_normal.h:448</div></div>
<div class="ttc" id="aclasspcl_1_1_integral_image_normal_estimation_html_a214361c92cfa4fb307f973638b71663c"><div class="ttname"><a href="classpcl_1_1_integral_image_normal_estimation.html#a214361c92cfa4fb307f973638b71663c">pcl::IntegralImageNormalEstimation::initData</a></div><div class="ttdeci">void initData()</div><div class="ttdoc">Initialize the data structures, based on the normal estimation method chosen.</div><div class="ttdef"><b>Definition:</b> integral_image_normal.hpp:56</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="accacab0813722377331fd6315a4d5d13"></a>
<h2 class="memtitle"><span class="permalink"><a href="#accacab0813722377331fd6315a4d5d13">&#9670;&nbsp;</a></span>setMaxDepthChangeFactor()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::setMaxDepthChangeFactor </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>max_depth_change_factor</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The depth change threshold for computing object borders </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">max_depth_change_factor</td><td>the depth change threshold for computing object borders based on depth changes </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;      {</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;        <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#abefcbb0a1e92132dd87ccda6d55ccb69">max_depth_change_factor_</a> = max_depth_change_factor;</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a6bde05e6637af21bb5f970c9feba4fc0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6bde05e6637af21bb5f970c9feba4fc0">&#9670;&nbsp;</a></span>setNormalEstimationMethod()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::setNormalEstimationMethod </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a1ad3ff9e39b97a8e4294b71ab13031ff">NormalEstimationMethod</a>&#160;</td>
          <td class="paramname"><em>normal_estimation_method</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the normal estimation method. The current implemented algorithms are: </p>
<ul>
<li>
<b>COVARIANCE_MATRIX</b> - creates 9 integral images to compute the normal for a specific point from the covariance matrix of its local neighborhood. </li>
<li>
<b>AVERAGE_3D_GRADIENT</b> - creates 6 integral images to compute smoothed versions of horizontal and vertical 3D gradients and computes the normals using the cross-product between these two gradients. </li>
<li>
<b>AVERAGE_DEPTH_CHANGE</b> - creates only a single integral image and computes the normals from the average depth changes. </li>
</ul>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">normal_estimation_method</td><td>the method used for normal estimation </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;      {</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a1837784fa20205739013c9df638468f5">normal_estimation_method_</a> = normal_estimation_method;</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ac833637b98338bafa4c38925ab245927"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac833637b98338bafa4c38925ab245927">&#9670;&nbsp;</a></span>setNormalSmoothingSize()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::setNormalSmoothingSize </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>normal_smoothing_size</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the normal smoothing size </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">normal_smoothing_size</td><td>factor which influences the size of the area used to smooth normals (depth dependent if useDepthDependentSmoothing is true) </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;      {</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;        <span class="keywordflow">if</span> (normal_smoothing_size &lt;= 0)</div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;        {</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;          PCL_ERROR (<span class="stringliteral">&quot;[pcl::%s::setNormalSmoothingSize] Invalid normal smoothing size given! (%f). Allowed ranges are: 0 &lt; N. Defaulting to %f.\n&quot;</span>, </div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;                      <a class="code" href="classpcl_1_1_feature.html#a54032b79551164878ff59ed93b5c1dc5">feature_name_</a>.c_str (), normal_smoothing_size, normal_smoothing_size_);</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;          <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;        }</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;        normal_smoothing_size_ = normal_smoothing_size;</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;      }</div>
<div class="ttc" id="aclasspcl_1_1_feature_html_a54032b79551164878ff59ed93b5c1dc5"><div class="ttname"><a href="classpcl_1_1_feature.html#a54032b79551164878ff59ed93b5c1dc5">pcl::Feature::feature_name_</a></div><div class="ttdeci">std::string feature_name_</div><div class="ttdoc">The feature name.</div><div class="ttdef"><b>Definition:</b> feature.h:222</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a51049e633396d653658a771a7be0bb9d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a51049e633396d653658a771a7be0bb9d">&#9670;&nbsp;</a></span>setRectSize()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::setRectSize </td>
          <td>(</td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>width</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>height</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the regions size which is considered for normal estimation. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">width</td><td>the width of the search rectangle </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">height</td><td>the height of the search rectangle </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;{</div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;  <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#ae61a7763129eaec087768796ee431cc3">rect_width_</a>      = width;</div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  rect_width_2_    = width/2;</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  rect_width_4_    = width/4;</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a9fddd3a5350251f9a2c8ccbc16a35cd5">rect_height_</a>     = height;</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  rect_height_2_   = height/2;</div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  rect_height_4_   = height/4;</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ac5aa14562fc0cca24be8cc43860d896a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac5aa14562fc0cca24be8cc43860d896a">&#9670;&nbsp;</a></span>setViewPoint()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::setViewPoint </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>vpx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>vpy</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>vpz</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the viewpoint. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">vpx</td><td>the X coordinate of the viewpoint </td></tr>
    <tr><td class="paramname">vpy</td><td>the Y coordinate of the viewpoint </td></tr>
    <tr><td class="paramname">vpz</td><td>the Z coordinate of the viewpoint </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;      {</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;        <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a40c07d1b44f4107d695842fcff3a87ce">vpx_</a> = vpx;</div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;        vpy_ = vpy;</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;        vpz_ = vpz;</div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;        <a class="code" href="classpcl_1_1_integral_image_normal_estimation.html#a01207a15920b58b89d97f7c650bfdf22">use_sensor_origin_</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">类成员变量说明</h2>
<a id="a4803e2c88084b1008c236868f8d53864"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4803e2c88084b1008c236868f8d53864">&#9670;&nbsp;</a></span>depth_data_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float* <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::depth_data_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>depth data </p>

</div>
</div>
<a id="a0c80b5461d38e8d9455f4aa5ad1a8a83"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0c80b5461d38e8d9455f4aa5ad1a8a83">&#9670;&nbsp;</a></span>diff_x_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float* <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::diff_x_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>derivatives in x-direction </p>

</div>
</div>
<a id="afe1b1e088f89b386279ad3581fe9b642"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afe1b1e088f89b386279ad3581fe9b642">&#9670;&nbsp;</a></span>diff_y_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float* <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::diff_y_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>derivatives in y-direction </p>

</div>
</div>
<a id="a25d9fff5422e0c591e78f04c4e9ca17c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a25d9fff5422e0c591e78f04c4e9ca17c">&#9670;&nbsp;</a></span>distance_map_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float* <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::distance_map_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>distance map </p>

</div>
</div>
<a id="a55d0c3687eefeefc28b8348d85bbb1d7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a55d0c3687eefeefc28b8348d85bbb1d7">&#9670;&nbsp;</a></span>distance_threshold_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::distance_threshold_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>the threshold used to detect depth discontinuities </p>

</div>
</div>
<a id="a6d6deebd64e2fab423a97ef61387e94a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6d6deebd64e2fab423a97ef61387e94a">&#9670;&nbsp;</a></span>integral_image_depth_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classpcl_1_1_integral_image2_d.html">IntegralImage2D</a>&lt;float, 1&gt; <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::integral_image_depth_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>integral image </p>

</div>
</div>
<a id="af125b60aeeef1334a25d24e5c2756d87"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af125b60aeeef1334a25d24e5c2756d87">&#9670;&nbsp;</a></span>integral_image_DX_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classpcl_1_1_integral_image2_d.html">IntegralImage2D</a>&lt;float, 3&gt; <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::integral_image_DX_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>integral image in x-direction </p>

</div>
</div>
<a id="a33e102529db567625037f7e15bb9bb4d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a33e102529db567625037f7e15bb9bb4d">&#9670;&nbsp;</a></span>integral_image_DY_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classpcl_1_1_integral_image2_d.html">IntegralImage2D</a>&lt;float, 3&gt; <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::integral_image_DY_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>integral image in y-direction </p>

</div>
</div>
<a id="a903b437af66404b7f634f69a45a493ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a903b437af66404b7f634f69a45a493ec">&#9670;&nbsp;</a></span>integral_image_XYZ_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classpcl_1_1_integral_image2_d.html">IntegralImage2D</a>&lt;float, 3&gt; <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::integral_image_XYZ_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>integral image xyz </p>

</div>
</div>
<a id="a1837784fa20205739013c9df638468f5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1837784fa20205739013c9df638468f5">&#9670;&nbsp;</a></span>normal_estimation_method_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html#a1ad3ff9e39b97a8e4294b71ab13031ff">NormalEstimationMethod</a> <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::normal_estimation_method_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The normal estimation method to use. Currently, 3 implementations are provided: </p>
<ul>
<li>COVARIANCE_MATRIX</li>
<li>AVERAGE_3D_GRADIENT</li>
<li>AVERAGE_DEPTH_CHANGE </li>
</ul>

</div>
</div>
<a id="a9fddd3a5350251f9a2c8ccbc16a35cd5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9fddd3a5350251f9a2c8ccbc16a35cd5">&#9670;&nbsp;</a></span>rect_height_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::rect_height_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>The height of the neighborhood region used for computing the normal. </p>

</div>
</div>
<a id="ae61a7763129eaec087768796ee431cc3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae61a7763129eaec087768796ee431cc3">&#9670;&nbsp;</a></span>rect_width_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::rect_width_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>The width of the neighborhood region used for computing the normal. </p>

</div>
</div>
<a id="a01207a15920b58b89d97f7c650bfdf22"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a01207a15920b58b89d97f7c650bfdf22">&#9670;&nbsp;</a></span>use_sensor_origin_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">pcl::IntegralImageNormalEstimation</a>&lt; PointInT, PointOutT &gt;::use_sensor_origin_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>whether the sensor origin of the input cloud or a user given viewpoint should be used. </p>

</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li>apps/in_hand_scanner/include/pcl/apps/in_hand_scanner/<a class="el" href="input__data__processing_8h_source.html">input_data_processing.h</a></li>
<li>features/include/pcl/features/<a class="el" href="integral__image__normal_8h_source.html">integral_image_normal.h</a></li>
<li>features/include/pcl/features/impl/<a class="el" href="integral__image__normal_8hpp_source.html">integral_image_normal.hpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><b>pcl</b></li><li class="navelem"><a class="el" href="classpcl_1_1_integral_image_normal_estimation.html">IntegralImageNormalEstimation</a></li>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
